Appearance
Nodejs中的cookie和session
cookie和session都是存储数据用的,但是cookie和sessin还是有很大的区别。
首先cookie是在浏览器端保存数据,每次请求都会把数据带到浏览器端,所以cookie存储数据不安全。并且cookie存储数据大小有限,最大为4k.
session保存数据在服务器端,session存储数据安全性高。可以无限存储。session是基于cookie存在的,也就是说没有cookie就不会有session。但是session还存在一个隐患,就是session劫持。
cookie
cookie的创建
express直接提供了api
javascript
res.cookie(key,value)接下来使用cookie发送一条数据
javascript
const express = require('express')
const app = express()
app.use('/',function(req,res){
res.cookie('user','blue')
res.send()
})
app.listen(8080)接下来开启服务器,在浏览器中的地址栏中访问,然后打开控制台-application-cookies,就能看到刚才存储的数据{'user','blue'}已经存储在cookie中了
接下来使用cookie接受一条数据
使用cookie接收数据的时候我们需要借助中间件——cookie-parser
javascript
npm i cookie-parser同样的使用cookie接受一条数据,express也为我们提供了api
javascript
req.cookies接下来看以下案例
javascript
const express = require('express')
const cookieParser = require('cookie-parser')
const app = express()
cookieParser.use()
app.use('/',function(req,res){
console.log(req.cookies)//输出发送的数据
res.send('ok')
})
app.listen(8080)同样的,我们再次开启服务器,在浏览器地址栏中输入localhost:8080,然后我们发现在命令行中会输出我们的数据
对cookie进行加密
因为cookie存储数据并不安全,所以我们在必要的时候可以对cookie数据进行加密,具体操作如下:
javascript
const express = require('express')
const cookieParser = require('cookie-parser')
const app = express()
cookieParser.use()
app.use('/',function(req,res){
//设置一个密钥
req.secret = 'abcdefg'
res.cookie('user','blue',{signed:true})//对cookie数据进行签名
console.log('签名cookie:'req.signedCookies)
console.log('未签名cookie:',req.cookies)
console.log(req.cookies())//输出发送的数据
})
app.listen(8080)然后我们同样开启服务器,使用localhost:8080访问,打开控制台——application,然后我们会发现已经被加密了
session
使用session除了需要中间件cookie-parser还需要中间件cookie-session
javascript
npm i cookie-session使用案例
javascript
const express = require('express')
const cookieParser = require('cookie-parser')
const cookieSession = require('cookie-session')
const app = express()
app.use(cookieParser())
app.use(cookieSession({
keys:['aaa','bbb','ccc']
}))
app.use('/',function(req,res){
console.log(req.session)
})
app.listen(8080)