美文网首页
koa中cookie和session的使用

koa中cookie和session的使用

作者: HonneyHao | 来源:发表于2019-02-02 14:01 被阅读0次

    1.cookie是存储于访问者的计算机中的数据,用于同一浏览器访问同一域的时候共享数据
    2.HTTP是无状态协议。也就是说:当你浏览了一个页面,然后跳转到同一个网站的另一个页面,服务器无法认识到这是同一个浏览器在访问同一个网站。每次的访问是没有关系的,也就是说服务器无法检测到这个状态

    特点:保存在客户端、用于同一浏览器访问同一个域的时候共享数据

    作用,例如:

    1.保存用户信息
    2.浏览历史记录
    3.10天免登录

    ----------------------------------------------

    1.koa中设置cookie的值

    1.设置cookie:

    router.get('/', async (ctx, next) => {
      ctx.cookies.set("userInfo","gouzi",{
        maxAge:1000*60*60
      })
      await ctx.render('index', {
        title: 'Hello Koa 啊啊啊啊!'
      })
    })
    

    2.获取cookie:

    let userInfo = ctx.cookies.get("userInfo");
    
    cookie的参数.png

    3.存储值为汉字的cookie(nodejs的cookie是不支持直接存储汉字的)
    先转化为buffer(let a = new Buffer("张三"))

    router.get('/', async (ctx, next) => {
      let name = new Buffer("狗子").toString('base64')
      ctx.cookies.set("userInfo",name,{
        maxAge:1000*60*60
      })
    })
    

    再转化为汉字字符串(.toString())

    router.get('/test', async (ctx, next) => {
      //从ctx里面获取get传值,query是格式化之后的,querystring是字符串的
      console.log(ctx.query)
      let userInfo = ctx.cookies.get("userInfo");
      let name = new Buffer(userInfo,'base64').toString()
      console.log(name)
      //ctx里面的request对象是那一大串东西
      ctx.body = 'koa2 string'
    })
    

    ------------------------------------------------------------

    session是另一种记录客户状态的机制,不同的是cookie存储在客户短,session存储在服务器端。
    session的运行机制:浏览器访问服务器并第一次发送请求时,服务器端会创建一个session对象,类似于key-value的结构,然后把key以cookie的形式存储在客户端,浏览器后续每次请求服务器时都会带上这个key(也就是cookie),服务器根据这个key来查找相应的value,也就是session。客户的信息都存储在session中

    koa session的使用(包名:koa-session):

    1.安装

    npm install koa-session
    

    2.引入

    const session = require('koa-session')
    

    3.配置

    app.keys = ['some secret hurr'];  /* cookie的签名 */
     
    const CONFIG = {
      key: 'koa:sess', /* 默认的cookie签名 */
      maxAge: 86400000,/* cookie的最大过期时间 */
      autoCommit: true, /** (boolean) automatically commit headers (default true) */
      overwrite: true, /** 无效属性 */
      httpOnly: true, /** (boolean) httpOnly or not (default true) */
      signed: true, /** 默认签名与否 */
      rolling: false, /** 每次请求强行设置cookie */
      renew: false, /** cookie快过期时自动重新设置*/
    };
     
    app.use(session(CONFIG, app));
    

    4.使用

    router.get('/buy', async (ctx, next)=> {
      console.log(ctx.session.username) //读取session
      ctx.body = 'this is a users response!'
    })
    
    router.get('/login', function (ctx, next) {
      ctx.session.username="狗子"    //设置session
      ctx.body = '登陆成功'
    })
    

    相关文章

      网友评论

          本文标题:koa中cookie和session的使用

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