cookie鉴权的目的:将后端设置的某一状态,在前端保留这一状态。然后,根据这一状态,判断请求的合法性。
至于session的作用,则是签名加密,提高安全性。
以登录请求这一过程为例:首先,后端响应的同时,设置ResponseHeader
当中的Set-Cookie属性
。随后,会在前端浏览器RequestHeaders
里面种下Set-Cookie属性值
了。从此,只要是同域情况之下,前端发送的所有请求,都会携带Cookie值。服务器通过解析Cookie值,判断请求是否合法。node原生代码如下:
const http = require('http');
http.createServer((req,res)=>{
if(req.url === '/favicon.ico'){
return;
}else{
// res.setHeader('Set-Cookie','ctx=koala');
res.writeHead(200,{
'Set-Cookie':'ctx=koala',
"Content-type":"text/html;charset=utf-8"
});
res.end('设置cookie');
}
}).listen(3000,()=>{
console.log('Server is running');
});
Koa,Cookie
Koa框架自带cookie鉴权
,至于session签名
,则需要借助koa-session插件
:
-
ctx.cookie.get('键名')
,获取cookie值。 -
ctx.cookie.set('键名','值',options)
,设置cookie值。
const koa = require('koa');
const server = new koa();
server.use(async (ctx) => {
ctx.cookies.set('variable', '12345', {
maxAge: 1000 // 毫秒(ms)
});
if (ctx.request.url === '/') {
console.log(ctx.cookies.get('variable')); //第一次打印结果:undefined
}
ctx.response.body = 'Hello World';
});
server.listen(3000, () => {
console.log('Server is running');
});
Session,koa-session插件
koa-session插件
使用:session('配置config','挂载服务server')
const Koa = require('koa');
const app = new Koa();
const session = require('koa-session');
app.keys = ['Encrypted field']; // 加密字段,cookie值
const CONFIG = {
key: 'koa:sess', // cookie键名
maxAge: '86400000', // 有效时间(ms)
signed: true, // 是否对session值进行签名(对cookie值进行Hash哈希计算,将不定长结果摘要定长结果)
}
// session中间件,session('配置config','挂载服务server')
app.use(session(CONFIG, app));
app.use(ctx => {
if (ctx.path === '/favicon.ico') return;
let i = ctx.session.count || 0;
ctx.session.count = ++i;
ctx.body = `${ctx.cookies.get('koa:sess.sig')}已经,第${i}次访问了。`
});
app.listen(3000, () => {
console.log(`Server is running`);
})
网友评论