title | date | tags | categories | |||
---|---|---|---|---|---|---|
Koa中使用Cookie & Session |
2018-09-06 03:43:21 -0700 |
|
|
cookie 是存储于访问者的计算机中的变量(客户端)。可以让我们用同一个浏览器访问同一个域名的时候共享数据。那为什么不使用http呢?很简单,因为HTTP 是无状态协议。简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页面,服务器无法认识到这是同一个浏览器在访问同一个网站。每一次的访问,都是没有任何关系的。
随便举几个例子:
- 存储用户信息,例如登陆信息。
- 浏览历史记录。
- 猜你喜欢的功能。
- 10天免登陆。
- 多个页面之间的数据传递。
- 实现购物车功能。
ctx.cookies.set(name, value, [options])
通过options设置cookie name的value:
options名称 | options值 |
---|---|
maxAge | 一个数字表示从 Date.now() 得到的毫秒数。 |
expires | cookie 过期的 Date |
path | cookie 路径, 默认是'/'。 |
secure | 安全 cookie 默认 false,设置成 true 表示只有 https 可以访问。 |
httpOnly | 是否只是服务器可访问 cookie, 默认是 true |
overwrite | 一个布尔值,表示是否覆盖以前设置的同名的 cookie (默认是 false). 如果是 true, 在同一个请求中设置相同名称的所有 Cookie(不管路径或域)是否在设置此 Cookie 时从Set-Cookie 标头中过滤掉。 |
console.log(new Buffer('hello, world!').toString('base64'));// 转换成 base64 字符串:aGVsbG8sIHdvcmxkIQ==
console.log(new Buffer('aGVsbG8sIHdvcmxkIQ==', 'base64').toString());// 还原 base64 字符串:hello, world!
session 是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。
当浏览器访问服务器并发送第一次请求时,服务器端会创建一个session 对象,生成一个类似于 key,value的键值对,然后将key(cookie)返回到浏览器(客户)端,浏览器下次再访问时,携带key(cookie),找到对应的Session(value)。 客户的信息都保存在Session中。
npm install koa-session --save
const session = require('koa-session');
app.keys = ['some secret hurr'];
const CONFIG = {
key: 'koa:sess', //cookie key (default is koa:sess)
maxAge: 86400000, // cookie 的过期时间 maxAge in ms (default is 1 days)
overwrite: true, //是否可以 overwrite (默认 default true)
httpOnly: true, //cookie 是否只有服务器端可以访问 httpOnly or not (default true)
signed: true, //签名默认 true
rolling: false, //在每次请求时强行设置 cookie,这将重置 cookie 过期时间(默认:false)
renew: false, //(boolean) renew session when session is nearly expired,
};
app.use(session(CONFIG, app));
- cookie 数据存放在客户的浏览器上,session 数据放在服务器上。
- cookie 不是很安全,别人可以分析存放在本地的 COOKIE 并进行 COOKIE 欺骗考虑到安全应当使用 session。
- session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用 COOKIE。
- 单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie。