美文网首页
cookie/session鉴权,Koa-session插件

cookie/session鉴权,Koa-session插件

作者: 张先觉 | 来源:发表于2020-05-08 10:14 被阅读0次

    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`);
    })
    

    相关文章

      网友评论

          本文标题:cookie/session鉴权,Koa-session插件

          本文链接:https://www.haomeiwen.com/subject/izsnghtx.html