npm官网:www.npmjs.com
安装:npm install cookie-parser
报错:
配置文件的name与这包名一样就报错了。。。
(1)cookie-parser模块
发送cookie:
名,值,设置
app.get('/test', function(req, res) {
res.cookie('name', 'heqi', { maxAge: 900000 });
});
修改cookie:覆盖即可
其他设置的值:
domain: 域名。设置子域名(二级域名)是否可以访问cookie。
例:domain:'.主域名'
name=value:键值对,可以设置要保存的 Key/Value,注意这里的 name 不能和其他属性项的名字一样
expires: 过期时间(秒),在设置的某个时间点后该 Cookie 就会失效,如 expires=Wednesday,
09-Nov-99 23:12:40 GMT
maxAge: 最大失效时间(毫秒),设置在多少后失效
secure: 当 secure 值为 true 时, cookie 在 HTTP 中是无效,在 HTTPS 中才有效
path: 表示 cookie 影响到的路由,如 path=/。如果路径不能匹配时,浏览器则不发送这个 Cookie
httpOnly: 是微软对 COOKIE 做的扩展。如果在 COOKIE 中设置了“httpOnly”属性,则通过程序(客户端)
(JS脚本、 applet 等)将无法读取到 COOKIE 信息,防止 XSS 攻击产生
signed: 表示是否签名 cookie, 设为 true 会对这个 cookie 签名,这样就需要用res.signedCookies 访问它
而不是 res.cookies 。被篡改的签名 cookie 会被服务器拒绝,并且 cookie值会重置为它的原始值
获取cookie
req的cookies属性:req.cookie
删除cookie:与浏览器一样,没有专门的方法。
res.cookie('username', 'zhangsan', { maxAge:0 });
使用signed属性加密cookie
1.配置中间件的时候需要传参
app.use(cookieParser('123456'));
2.设置 cookie 的时候配置 signed 属性
res.cookie('username', 'haha', { maxAge:900000, signed:true });
- 这样就需要用req.signedCookies 访问它而不是 req.cookies
console.log(req.signedCookies);
(2)express-session模块
一、 Session 简单介绍
session 是另一种记录客户状态的机制, 不同的是 Cookie 保存在客户端浏览器中, 而 session 保存在服务器上。
二、 Session 的工作流程
当浏览器访问服务器并发送第一次请求时,服务器端会创建一个 session 对象,生成一个类似于key,value 的键值对,然后将 key(cookie)返回到浏览器(客户)端,浏览器下次再访问时,携带 key(cookie),找到对应的 session(value)。 客户的信息都保存在服务端的session 中。(具体翻看图解HTTP)
三、 express-session 的使用:
1.安装 express-session
npm install express-session --save
2.引入 express-session
var session = require("express-session");
3.设置
app.use(session({
secret: 'keyboard cat',
resave: true,
saveUninitialized: true
}))
4.使用
设置值 req.session.username = "张三";
获取值 req.session.username
5.设置参数:
secret:一个 String 类型的字符串,作为服务器端生成 session 的签名。
name:返回客户端的 key 的名称, 默认为 connect.sid,也可以自己设置。
resave:强制保存 session 即使它并没有变化,。 默认为 true。 建议设置成 false。
saveUninitialized:强制将未初始化的 session 存储。 当新建了一个 session 且未设定属性或值时, 它就处于未初始化状态。 在设定一个 cookie 前, 这对于登陆验证, 减轻服务端存储压力, 权限控制是有帮助的。(默认: true) 。 建议手动添加。
cookie:与cookie的设置一样,设置发送到客户端 的key 的属性, 默认值为{ path: ‘/’ , httpOnly: true, secure: false, maxAge: null }。
rolling:在每次请求时强行重新设置 cookie, 这将重置 cookie 过期时间(默认: false)
6.express-session 的常用方法:
req.session.username = '张三';
req.session.username
req.session.cookie.maxAge = 0;
req.session.destroy(function(err) {
})
后面两条可用于用户退出登录。
另外还有一个cookie-session模块,应该也差不多。
四、将session保存到mongodb:
可用于实现负载均衡
1.需要安装 express-session 和 connect-mongo 模块
2.引入模块
var session = require("express-session");
var MongoStore = require('connect-mongo')(session);
3.配置中间件
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
rolling:true,
cookie:{
maxAge:100000
},
store: new MongoStore({
url: 'mongodb://127.0.0.1:27017/person',
touchAfter: 24 * 3600 // time period in seconds
})
}))
这样就可以连接mongodb,自动创建sessions集合,然后将session对象自动存进去了。这当然也可以用一般的操作实现,但封装好的模块怎么能不用。