Express框架cookie和session
HTTP协议是无状态的,所以要通过一些机制来记录用户的信息。cookie是存在浏览器端的,session是存在服务器端。
cookie
cookie存在浏览器端,每次请求都会带上。
缺点:不安全(用户可以随便串改),大小(4k)。
session
session只存在服务器端。
优点:容量不限,比较安全(用户接触不到)。
session实现是基于cookie的。
风险:session_id 被泄露漏 session劫持。
提醒用户不在在控制台输入(console)输入代码。
session_id 足够复杂,定期更换。
Express操作cookie
先安装cookie-parser。
1 | npm install cookie-parser -S |
1 | // app.js |
在cmd执行 node app.js 浏览器输入http://localhost:8000/ 第一次控制台输出{},再刷新就输出{user: ‘lanpangzhi’ }。
现在就能获取和设置cookie了,但是有个问题,浏览器执行document.cookie = “user=aaa”,浏览器再刷新控制台就会输出{user: ‘aaa’ }。
这样使用cookie不安全,敏感信息容易被篡改,所以要使用带签名的cookie。
带签名的cookie
1 | // app.js |
再执行,就会发现浏览器cookie的值变成了s%3Alanpangzhi.i6hEUuhD%2Fd0miBMsGyRdktiDFmi%2BYfiJhQTcqKpQqIc ,再修改cookie的值,控制台就会输出{ user: false },这样cookie就不会被简单的篡改了。
req.cookies 获取cookie。
res.cookie(name, value [, options]);
name: cookie的名称(string)。
value: cookie的值,(string or object)。
options:options参数是一个可以具有以下属性的对象。
如下
值 | 类型 | 说明 |
---|---|---|
domain | String | cookie的域名。 默认为网站的域名。 |
encode | Function | 用于cookie值编码的同步函数。 默认为encodeURIComponent。 |
expires | Date | cookie的有效期(如果未指定或设置为0),则创建会话cookie。 |
httpOnly | Boolean | 将cookie标记为仅可由Web服务器访问。默认false |
maxAge | Number | 设置cookie的到期时间、相对于当前时间的到期时间(以毫秒为单位)。 |
path | String | cookie的路径。 默认为“/” |
secure | Boolean | 将cookie标记为仅与HTTPS一起使用。默认false |
signed | Boolean | 对cookie进行签名。默认false |
Express操作session
先安装cookie-session。
1 | npm install cookie-session -S |
1 | // app.js |
在cmd执行 node app.js 浏览器输入http://localhost:8000/ 刷新浏览器就可以看到访问几次,把所有浏览器都关闭session就失效了,再进入页面就从第一次开始了。
更多方法还有详细参数可以去github自行参考。
参考
http://expressjs.com/en/4x/api.html
https://github.com/expressjs/cookie-parser
https://github.com/expressjs/cookie-session