zoukankan      html  css  js  c++  java
  • koa 中使用 session

    Session:

    session 是另一种记录客户端状态的机制,不同的是 Cookie 保存在客户端的浏览器中,而 session 保存在服务器上。

    session 工作流程:

      当浏览器访问服务器并发送第一次请求时,服务端会创建一个 session 对象,生成一个类似于 key,value的键值对,然后将 key(cookie)返回到浏览器(客户端),浏览器下次再访问时,携带 key(cookie),找到对应的 session(value),客户的信息都保存在 session 中。

    koa-session 的使用:

    安装 koa-session   npm install koa-session --save

    引入配置 koa-session:

    https://www.npmjs.com/package/koa-session

    设置 session:ctx,session.userName = “张三”

    获取 session值:ctx.session.userName

    const session = require('koa-session');
    const Koa = require('koa');
    const router = require('koa-router')();
    const app = new Koa();
    const render = require('koa-art-template')
    const path = require('path')
    
    //配置koa-art-template模板引擎
    render(app,{
        root: path.join(__dirname, 'views'),   // 视图的位置
        extname: '.html',  // 后缀名
        debug: process.env.NODE_ENV !== 'production'  //是否开启调试模式
    })
    
    //配置koa-session
    app.keys = ['some secret hurr']; //cookie的签名
    const CONFIG = {
        key: 'koa:sess', /** (string) cookie key (default is koa.sess) */
        maxAge: 86400000, //cookie的过期时间,默认24h
        autoCommit: true, /** (boolean) automatically commit headers (default true) */
        overwrite: true, /** 默认为true */
        httpOnly: true, /** true表示只有服务器端可以获取cookie */
        signed: true, /** 默认 签名 */
        rolling: false, /** 在每次请求时强行设置 cookie,这将重置 cookie 过期时间(默认:false)  */
        renew: false, /** (boolean) renew session when session is nearly expired, so we can always keep user logged in. (default is false)*/
        secure: false, /** (boolean) secure cookie,默认是true,服务器开启了Https时,cookie的Secure属性应设为true*/
        sameSite: null, /** (string) session cookie sameSite options (default null, don't set it) */
    };
    
    app.use(session(CONFIG, app));
    
    router.get('/',async (ctx)=>{
        //获取session
        console.log("首页获取session:",ctx.session.userName)
        await ctx.render('index')
    })
    router.get('/login', async (ctx) => {
        //设置session
        ctx.session.userName='李华'
        await ctx.render('login')
    })
    router.get('/list', async (ctx) => {
        //获取session
        console.log("列表页获取session:", ctx.session.userName)
        await ctx.render('list')
    })
    
    app.use(router.routes());  
    app.use(router.allowedMethods());
    app.listen(3000);
    

    第一次进入首页,获取的 session值是 undefined,进入login登录页,设置了 session后,再次进入列表页和首页,可以获取 session的值:

    Cookie和Session 的区别:

    ① cookie 数据存放在客户的浏览器上,session 数据放在服务器上

    ② cookie 不是很安全,别人可以分析存放在本地的 cookie 并进行 cookie 欺骗,考虑到安全应当使用 session

    ③ session 会在一定时间内保留在服务器上,当访问增多,会比较占用服务器的性能,考虑到减轻服务器性能方面,应当使用 cookie

    ④ 单个 cookie 保存的数据不能超过 4k,很多浏览器都限制一个站点最多保存 20个 cookie

  • 相关阅读:
    Thread.GetNamedDataSlot(String)
    .NET Core 常用加密和Hash工具NETCore.Encrypt
    .netcore在linux下使用P/invoke方式调用linux动态库
    IHttpAsyncHandler IHttpHandler
    Docker & ASP.NET Core 教程
    Docker在Linux上运行NetCore系列(一)配置运行DotNetCore控制台
    《异常检测》
    《awesome-AIOps》
    《Skyline 监控系统工作原理分析》
    《小团队撬动大数据——当当推荐团队的机器学习实践》
  • 原文地址:https://www.cnblogs.com/shanlu0000/p/13171054.html
Copyright © 2011-2022 走看看