1. 安装
cnpm install cookie-parser --save
cnpm i express-session --save
2. cookie和session的区别
(1)cookie是服务器发送给客户端的一段特殊信息,这些信息以文本文件形式存放在客户端,客户端向服务器发送请求时会带上这些信息,用来验证身份
(2)session是存储在服务器上的数据,相对于cookie安全性更高,在一个客户开始访问网站的时候,会生成一个sessionId,这个id每次访问都会带上,服务器会识别这个sessionid,并把与这个sessionid相关的数据都保存在服务器上,由此来实现客户端的状态
2. 设置和获取cookie信息
const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();
// 引入中间件 解析cookie
app.use(cookieParser());
app.get('/set', (req, res) => {
// maxAge: 设置过期时间单位ms 如果不设置过期时间,默认浏览器关闭失效
// 设置cookie
res.cookie('city', 'wuhan', { maxAge: 6 * 1000 })
res.send('ok')
})
app.get('/get', (req, res) => {
// 获取cookie
res.send(req.cookies)
})
app.listen(7000);
3. 查看cookie信息
5. cookie 加密
/*
自定义本地域名 C:\Windows\System32\drivers\etc
*/
var express = require('express');
var app = express();
// 引入cookie处理中间件
var cookieParser = require('cookie-parser');
// 设置中间件
// 加盐用于cookie加密
app.use(cookieParser('abc'));
// 设置cookie
app.get('/set', function(req, res) {
// maxAge: 设置过期时间
// signed: true 加密cookie
res.cookie('username', 'kanglun', { maxAge: 60 * 1000, signed: true })
res.send('hello nodejs')
})
// 获取cookie
app.get('/get', function(req, res) {
// signedCookies获取解密后的cookie
res.send(req.signedCookies)
})
app.listen(3000);
6. cookie 案例
const express = require('express')
const cookieParser = require('cookie-parser')
const app = express()
app.use(cookieParser())
app.get('/:city', (req, res) => {
// 去掉图标影响
if (req.url == '/favicon.ico') return
let city = req.params.city;
// 获取浏览器储存的cookie 第一次为undefined
let allCity = req.cookies.city || []
allCity.push(city)
res.cookie('city', allCity, {
maxAge: 900 * 1000
})
res.send('今天去了' + city)
})
app.get('/', (req, res) => {
if (req.url == '/favicon.ico') return
res.send('一共去了这些地方' + req.cookies.city)
})
app.listen(5000)
7. session案例
const express = require('express')
const sesion = require('express-session')
const app = express()
// 要求客户端设置一个加密的cookie
app.use(sesion({
secret: 'heaven',
cookie: { maxAge: 900 * 1000 },
resave: true,
saveUninitialized: true
}))
app.get('/', (req, res) => {
// console.log(req.session)
if (req.url === '/favicon.ico') return
res.setHeader('content-type', 'text/html;charset=utf-8')
res.send('一共去了这些城市' + req.session.city)
})
app.get('/:city', (req, res) => {
if (req.url === '/favicon.ico') return
let city = req.params.city
// 设置session
req.session.city = req.session.city || [];
req.session.city.push(city)
// console.log(req.session)
res.setHeader('content-type', 'text/html;charset=utf-8')
res.end('今天去了' + city)
})
app.listen(5000)