Skip to content

Nodejs中的cookie和session

发表于
更新于
阅读量

cookie和session都是存储数据用的,但是cookie和sessin还是有很大的区别。

首先cookie是在浏览器端保存数据,每次请求都会把数据带到浏览器端,所以cookie存储数据不安全。并且cookie存储数据大小有限,最大为4k.

session保存数据在服务器端,session存储数据安全性高。可以无限存储。session是基于cookie存在的,也就是说没有cookie就不会有session。但是session还存在一个隐患,就是session劫持。

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)

Released under the MIT License.