一、Cookie的增删改查和配置加密
对Cookie的简单了解
HTTP请求是无状态的,但是在开发时,有些情况是需要知道请求的人是谁的。为了解决这个问题,HTTP协议设计了一个特殊的请求头:
Cookie。服务端可以通过响应头(set-cookie)将少量数据响应给客户端,浏览器会遵循协议将数据保留,并在下一次请求同一个服务的时候带上。
1.Cookie的增加操作
其实egg已经为我们准备好了操作Cookie的方法。直接使用就可以了。
/app/controller/cookieTest.js
// 增加Cookie
async add() {
const { ctx } = this;
ctx.cookies.set('user', '12345789');
ctx.body = {
status: 200,
data: 'Cookie添加成功!',
};
}
路由配置
router.post('/add', controller.cookieTest.add);
访问127.0.0.1:7001/add
2.Cookie的删除操作
只需要将增加Cookie操作的代码进行小小改动即可实现删除Cookie。
// 删除Cookie
async del() {
const { ctx } = this;
ctx.cookies.set('user', null); //将value值设置为null,即为删除
ctx.body = {
status: 200,
data: 'Cookie删除成功!',
};
}
3.Cookie的修改操作
还是同增加Cookie操作一样,只需修改不同的value值即可
// 修改Cookie
async editor() {
const { ctx } = this;
ctx.cookies.set('user', 'asdfghj'); //修改即改变value值
ctx.body = {
status: 200,
data: 'Cookie修改成功!',
};
}
4.Cookie的查看操作
查询Cookie要使用ctx.cookies.get( )方法
// 查询Cookie
async show() {
const { ctx } = this;
const user = ctx.cookies.get('user');
console.log(user);
ctx.body = {
status: 200,
data: 'Cookie查询成功!',
};
}
5.Cookie的其他配置操作
ctx.cookies.set( ) 方法是有三个参数的,第一个参数是key,第二个参数是value,第三个参数就可以进行配置。比如你需要配置Cookie的有效时间,可以使用maxAge属性。(这个时间是毫秒。)
ctx.cookies.set('user', '12345789', {
maxAge: 2000,//等2秒钟之后再刷新页面,Cookie就自动消失了,也就是到达了最大有效时间。
});
伪造Cookie来绕过登录是黑客经常使用的一种手段,所以为了安全,Egg.js默认设置只允许服务端来操作Cookie。
比如现在你通过JS的方式document.cookie获取Cookie是不能获取的(需要在浏览器的控制台输入获取)。当我们想通过客户端操作Cookie时,可以通过下面的代码进行设置。
ctx.cookies.set('user', '12345789', {
maxAge: 2000,
httpOnly: false, // 为了安全性,默认选择true
});
在Cookie里设置中文,服务端会直接报错的。比如我们在add( )方法里设置中文,然后再操作就会报错500。进行加密encrypt:true操作即可设置中文。
ctx.cookies.set('user', '你好!', {
encrypt: true,
});
直接通过ctx.cookies.get( )方法获取,获取的是undefind,也就是无法获取的。这时候需要再次配置解密才可以使用。
const user = ctx.cookies.get('user', {
encrypt: true,
});
也可以使用base64对字符串进行加密解密。
二、Session相关操作
Cookie和Session非常类似,Egg中的Session就存储再Cookie中,但是Session比Cookie的安全性更高。所以在开发中经常使用Cookie来保存是否登录,而用Session来保存登录信息和用户信息。公开的信息都可以临时存在Cookie里,但是隐私重要的信息,可以存在Session里,并且只允许在服务端进行操作。
1. 添加Session
//添加Session
ctx.session.username='123456'
//修改同理,只需修改value值
//Session直接支持中文
ctx.session.username='你好!'
2. 获取Session
//获取Session
const username= ctx.session.username
3. 删除Session
//删除Session
ctx.session.username=null
4. Session相关项配置
配置Session的一些选项,需要到config.default.js文件中进行配置。
config.session = {
key :"Test_SESS", // 设置Key的默认值
httpOnly:true, // 设置服务端操作
maxAge:1000*60 , // 设置最大有效时间
renew: true, // 页面有访问动作自动刷新session
}
学习日期:2021/12/24
视频参考:www.bilibili.com/video/BV1s3…
仅供个人学习和记录