koa 中 cookie 和 session 的使用
2020-12-31 本文已影响0人
shadow123
cookie
cookie 是存储于访问者的计算机中的变量。可以让我们用同一浏览器访问同一域名的时候共享数据。
ctx.cookie,set(name,value,[options])
options 中的参数:
- maxAge:一个数字表示从
Date.now()
得到的毫秒数。 - expires: cookie 过期的Date
- path:cookie 路径,默认是 /
- secure: 安全 cookie,默认 false,设置成true 表示只有 https 可以访问
- httponly:是否只是服务器可以访问 cookie,默认是 true
示例:
ctx.cookie,set("userinfo","user",{
maxAge:60*60*1000
})
koa 中cookie 不能直接使用中文,需要转换成 base64 字符
let data = new Buffer("名字"),toString("base64")
ctx.cookie,set("userinfo",data,{
maxAge:60*60*1000
})
// 使用
let cookieData = ctx.cookie.get("userinfo")
new Buffer(cookieData,"base64").toString()
session
session 是另一种记录客户状态的机制,不同的是 cookie 保存在客户端浏览器中,而 session 保存在服务器上。
session 的工作流程
当浏览器访问服务器并发送第一次请求时,服务器端会创建一个 session
对象,生成一个类似于 key,value
的键值对,然后将 key(cookie)
返回到浏览器(客户)端,浏览器下次再访问时,携带 key(cookie)
,找到对应的 session(value)
。客户的信息都保存在session 中。
koa 中 使用 session
1.安装 koa-session
npm install koa-session --save
2.引入 koa-session
const session = require('koa-session')
3.设置中间件
app.keys = ['some secret hurr'];
const CONFIG = {
key: 'koa.sess', // cookie key
maxAge: 86400000,// cookie 的过期时间,默认1天
autoCommit: true, // 自动提交headers,默认为true */
overwrite: true, // 是否可以 overwrite,默认为true */
httpOnly: true, // 是否只有服务器可以访问httpOnly,默认为true
signed: true, // 签名默认为true
rolling: false, // 在每个请求时强制设置cookie。到期重置cookie过期时间。默认为false
renew: false, // 当会话即将到期时更新会话,因此我们可以始终保持用户登录状态。默认为 false
secure: true, // 安全 cookie
sameSite: null, // cookie sameSite 选项,默认null
};
app.use(session(CONFIG, app));
4.使用
// 设置 session
ctx.session.username = "user"
// 获取 session
ctx.session.username
cookie 和 session 的区别
1.cookie 数据存放在客户的浏览器上,session 数据放在服务器上。
2.cookie 不是很安全,别人可以分析存放在本地的 cookie 并进行 cookie 欺骗,考虑到安全应当使用 session。