cookie
cookie 是存储于访问者的计算机中的变量,可以让我们用同一个浏览器访问同一个域名的时候共享数据。
由于HTTP 是无状态协议。简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页面,服务器无法认识到这是同一个浏览器在访问同一个网站。每一次的访问,都是没有任何关系的。Cookie 是一个简单到爆的想法:当访问一个页面的时候,服务器在下行 HTTP 报文中,命令浏览器存储一个字符串; 浏览器再访问同一个域的时候,将把这个字符串携带到上行HTTP 请求中。第一次访问一个服务器,不可能携带 cookie。 必须是服务器得到这次请求,在下行响应报头中,携带 cookie 信息,此后每一次浏览器往这个服务器发出的请求,都会携带这个 cookie。
基础使用
Express 中要使用 Cookie 的话,我们需要使用 cookie-parser 模块来实现:
1、安装中间件:cnpm install cookie-parser --save
2、使用中间件:
然后,我们就可以在浏览器中查看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 攻击产生
- singed:表示是否签名 cookie, 设为 true 会对这个 cookie 签名,这样就需要用res.signedCookies 而不是 res.cookies 访问它。被篡改的签名 cookie 会被服务器拒绝,并且 cookie 值会重置为它的原始值
删除cookie
加密cookie
Session
Cookie 数据存放在客户的浏览器上,Session 数据放在服务器上。Session 相比 Cookie 要更安全一些。由于 Session 保存到服务器上,所以当访问量增多的时候,会比较占用服务器的性能。单个 cookie 保存的数据大小不能超过 4K,很多浏览器都限制一个站点最多保存 20个 cookie。Session 没有这方面的限制。Session 是基于 Cookie 进行工作的。
基础使用
1、安装中间件:cnpm install express-session --save
2、使用中间件:
const express = require('express') const session = require('express-session') const app=express() //配置session的中间件 app.use(session({ secret: 'this is session', //服务器端生成 session 的签名 name:"node", //修改session对应cookie的名称 resave: false, //强制保存 session 即使它并没有变化 saveUninitialized: true, //强制将未初始化的 session 存储 cookie: { maxAge:1000*60*30, secure: false // true 表示只有https协议才能访问cookie }, rolling:true //在每次请求时强行设置 cookie,这将重置 cookie 过期时间(默认:false) })) app.get("/login",(req,res)=>{ //设置seesion req.session.username="张三" req.session.age=20 res.send("执行登录") }) app.get("/news",(req,res)=>{ //获取seesion if(req.session.username || req.session.age){ res.send(req.session.username+"--"+req.session.age+"-已登录") }else{ res.send("没有登录") } }) app.listen(3000)
session删除
删除session有三种方式:
1、设置过期时间(对所有有效)
req.session.cookie.maxAge=0;
2、赋空值(仅对当前指定字段有效)
req.session.username="";
3、使用销毁方法
req.session.destroy();
负载均衡配置 Session,把 Session 保存到数据库里面
如果要将session存放到数据库中,实现负载均衡,需要借助connect-mongo中间件:
1、执行npm命令安装cnpm install connect-mongo --save
2、引入模块,并在session的基础上配置中间件
其中url是数据库的连接地址加上需要存放的数据库名称,这个数据库可以是存在的,也可以是不存在的,如果不存在,就会自动新建。
3、存储session
4、查看session