Appearance
cookie & session #
6 Cookie 的使用 #
6.1 Cookie 简介 #
- cookie 是存储于访问者的计算机中的变量。可以让我们用同一个浏览器访问同一个域名的时候共享数据。
- HTTP 是无状态协议。简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页面,服务器无法认识到这是同一个浏览器在访问同一个网站。每一次的访问,都是没有任何关系的。
6.2 Cookie 的设置和获取 #
6.2.1 Cookie 设置语法 #
ctx.cookies.set(key, value, options)
javascript
this.ctx.cookies.set("name", "zhangsan");
1
6.2.2 Cookie 获取语法 #
ctx.cookies.get(key, options)
javascript
this.ctx.cookies.get("name");
1
6.2.3 清除 Cookie #
javascript
this.ctx.cookies.set("name", null);
1
或者设置 maxAge 过期时间为 0
6.3 Cookie 参数 options #
javascript
ctx.cookies.set(key, value, {
maxAge:24 * 3600 * 1000,
httpOnly: true, // 默认情况下是正确的
encrypt: true, // cookie在网络传输期间加密
ctx.cookies.get('frontend-cookie', {
encrypt: true
});
1
2
3
4
5
6
7
2
3
4
5
6
7
6.4 设置中文 Cookie #
6.4.1 第一种解决方案 #
javascript
console.log(new Buffer("hello, world!").toString("base64"));
// 转换成 base64字符串:aGVsbG8sIHdvcmxkIQ==
console.log(new Buffer("aGVsbG8sIHdvcmxkIQ==", "base64").toString()); // 还原 base64字符串:hello, world!
1
2
3
2
3
6.4.2 第二种解决方案 #
javascript
ctx.cookies.set(key, value, {
maxAge: 24 * 3600 * 1000,
httpOnly: true, // 默认情况下是正确的
encrypt: true, // cookie在网络传输期间进行加密
});
1
2
3
4
5
2
3
4
5
7 Session 的使用 #
7.1 Session 简单介绍 #
session 是另一种记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而 session 保存在服务器上。
7.2 Session 的工作流程 #
当浏览器访问服务器并发送第一次请求时,服务器端会创建一个 session 对象,生成一个类似于 key,value 的键值对, 然后将 key(cookie)返回到浏览器(客户)端,浏览器下次再访问时,携带 key(cookie),找到对应的 session(value)。
7.3 Egg.js 中 session 的使用 #
egg.js 中 session 基于 egg-session 内置了对 session 的操作
7.3.1 设置 #
javascript
this.ctx.session.userinfo = {
name: "张三",
age: "20",
};
1
2
3
4
2
3
4
7.3.2 获取 #
javascript
var userinfo = this.ctx.session;
1
7.3.3 Session 的默认设置 #
javascript
exports.session = {
key: "EGG_SESS",
maxAge: 24 * 3600 * 1000, // 1 day httpOnly: true,
encrypt: true,
};
1
2
3
4
5
2
3
4
5
7.4 Session 在 config.default.js 中的配置 #
javascript
config.session = {
key: "SESSION_ID",
maxAge: 864000,
renew: true, //延长会话有效期
};
1
2
3
4
5
2
3
4
5
7.5 cookie 和 session 区别 #
- cookie 数据存放在客户的浏览器上,session 数据放在服务器上。
- cookie 相比 session 没有 session 安全,别人可以分析存放在本地的 COOKIE 并进行 COOKIE 欺骗。
- session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用 COOKIE。
- 单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie。