nodejs之koa2 – cookie和session的使用
cookie
以前只是在前端浏览器上对cookie进行操作,很少在服务端使用cookie,
所以就会有一个错觉:cookie只能在客户端利用js设置读取删除等,但事实上很多的cookie是由服务端在response的headers里面写进去的,
今天就记录一下cookie在服务端的使用。比如koa记录cookie,非常简单
首先我们先定义一个cookie的config,然后使用cookies.set方法就可以直接设置cookie了
const cookieConfig = {
maxAge: 1000 * 60 * 3, // 一个数字表示从 Date.now() 得到的毫秒数
expires: new Date('2019-03-08'), // 过期的 Date,如不设置就和session类似,关闭浏览器此cookie失效
path: '/', // 路径, 默认是'/'
domain: 'localhost', // 域名
secure: false, // 安全 cookie 默认false,设置成true表示只有 https可以访问
httpOnly: false, // 是否只是服务器可访问 cookie, 默认是 true
overwrite: true // 一个布尔值,表示是否覆盖以前设置的同名的 cookie (默认是 false). 如果是 true, 在同一个请求中设置相同名称的所有 Cookie(不管路径或域)是否在设置此Cookie 时从 Set-Cookie 标头中过滤掉。
}
// 设置cookie
router.get('/setCookie',async (ctx,next) => {
ctx.cookies.set('ceshi', 'ceshishi', {cookieConfig});
ctx.response.body = {status: 200, msg: '设置成功'};
});
// 获取cookie ctx.cookie.get(key);
router.get('/getCookie',async (ctx,next) => {
let cookies = ctx.cookies.get('ceshi'});
ctx.response.body = {status: 200, cookie: cookies};
});
很简单的,我们在前台发起一个设置cookie的请求,例子如下
<button onclick="setCookie()">点击测试设置cookie方法</button>
var setCookie = () => {
$.ajax({
type:'GET',
url:'/setCookie',
dataType:'json',
success(data){
console.log(data);
},
error (err){
console.log(err);
}
});
};
请求之后,查看我们浏览器控制台
删除cookie的话就跟前台一样,设置cookie值为空,并且设置maxAge为0,或者设置cookie的过期时间,让cookie过期就好了,具体操作如下
// 清除cookie
router.get('/delCookie',async (ctx,next) => {
ctx.cookies.set('ceshi','',{maxAge:0}});
ctx.response.body = {status: 200, msg:'cookie删除成功'};
});
session
session 是另一种不同于cookie的记录客户端状态的机制,不同的是cookie是保存在客户端浏览器中,而session则是可以保存在服务器上,
session会在一定时间内保存在服务器上,应当考虑到当访问增多,会比较占用服务器的性能,所以如果应用访问较多的话可以使用cookie。
koa使用session的话会使用到koa-session中间件,使用如下
1.安装
npm install koa-session --save
2.配置 session
const session = require('koa-session');
// 使用session
app.keys = ['secret'];
const CONFIG = {
key: 'koa:sess', // cookie key (默认koa:sess)
maxAge: 86400000, // cookie的过期时间,毫秒,默认为1天
overwrite: true, // 是否覆盖 (默认default true)
httpOnly: false, // cookie是否只有服务器端可以访问,默认为true
signed: true, // 签名默认true
rolling: false, // 在每次请求时强行设置cookie,这将重置cookie过期时间(默认:false)
renew: false, // (boolean) 会话即将到期时,续订会话
};
app.use(session(CONFIG, app));
3.session使用
// 保存session
router.get('/setSession', async (ctx, next) => {
try {
ctx.session.username = ctx.query.name;
ctx.session.age = ctx.query.age;
ctx.body = {status: 200, msg: 'session设置成功'};
} catch (e) {
ctx.body = {status: 200, msg: 'session设置失败', err: e};
}
});
// 获取session
router.get('/getSession', async (ctx, next) => {
try {
let name = ctx.session.username,
age = ctx.session.age;
ctx.body = {
status: 200,
msg: 'session获取成功',
name: name,
age: age
};
} catch (e) {
ctx.body = {
status: 200,
msg: 'session获取失败',
err: e
};
}
});
至此,koa session和cookie介绍完毕,可以愉快的写代码了,下一篇,小弟就记录一下如何使用koa快速构建一个项目。
本文纯手打,有不当之处请留言!如果对小伙伴们有帮助的话,点赞啊,谢谢!