• nodeJs学习-08 cookie、session


    http-无状态的:两次访问之间,无区别,cookie可解决

    cookie:在浏览器保存一些数据,每次请求都会带过来;

      弊端:可以查看修改,并不安全、大小有限(4K)

      读取--cookie-parser

      发送--

      

    session:保存数据,保存在服务端,更加安全,大小无限

      基于cookie实现,通过cookie读取session值;cookie中会有一个session的ID,服务器利用session_id找到session文件、读取、写入

      隐患:session劫持--cookie加密、定期更换等

      cookie-session

    1、发送cookie

      res.secret(签名);

      res.cookie(名字,值,{path:'/',maxAge:毫秒单位的有效期,signed:true}

    2、读取cookie

      依赖cookie-parser 中间件  签名

        cookie-encrypter 中间件  加密

      server.use(cookieParser('asgewrwrfsf'));    //签名秘钥  必须和req.secret的一致  
      console.log('未签名的cookie:',req.cookies);   
      console.log('签名的cookie',req.signedCookies);
    3、删除cookie
      res.clearCookie(名字)
     
    const express = require('express');
    const cookieParser = require('cookie-parser');      //读取cookie使用
    
    var server = express();
    server.listen(8080);
    
    
    server.use(cookieParser('asgewrwrfsf'));    //签名秘钥  必须和下面req.secret的一致,才能解析正确,下面无需重新声明
    
    server.use('/',function(req,res){
      //req.secret = 'asgewrwrfsf';    //签名秘钥
      res.cookie('user','userName',{    //存cookie,发送cookie
        path:'/aaa/a.html',      //此目录下才能访问
        maxAge:30*24*2600*1000,    //有效期  30天
        signed:true,      //签名 ,依旧可以看见,但是可以防止篡改
      });      
    
      //读取cookie,需要依赖cookie-parser中间件,分开接收
      console.log('未签名的cookie:',req.cookies);   
      console.log('签名的cookie',req.signedCookies);
    
      // res.clearCookie('user',{path:'/aaa/a.html'});    //删除cookie
    
      res.send('ok');
    })

    session读写:

      依赖cookie-session中间件,cookie-parser

      session劫持预防,key必须设置

    const express = require('express');
    const cookieParser = require('cookie-parser');      //读取cookie使用
    const cookieSession = require('cookie-session');     
    
    var server = express();
    server.listen(8080);
    
    
    server.use(cookieParser());  
    var arr = [];
    for(var i=0;i<100000;i++){
      arr.push('sig_'+Math.random());
    };
    server.use(cookieSession({
      name:'se',
      keys:arr,     //防session劫持
      maxAge:24*3600*1000,      //有效期
    })); 
    
    server.use('/',function(req,res){
      console.log(req.session);
      if(req.session['count'] == null){
        req.session['count'] = 1;
      }else{
        req.session['count']++;
      }
     
     //删除session
     //delete req.session res.send(
    'ok2'); })

      

     
  • 相关阅读:
    gdb ../sysdeps/i386/elf/start.S: No such file or directory
    zoj 2068
    poj 1068 Parencodings
    图论----同构图
    Leetcode-Sum Root to Leaf Numbers
    作弊揭发者
    理解 Delphi 的类(十一)
    动态生成lookup字段
    Delphi报的错误
    Cannot create file"C:UsersLMLAppDataLocalTempEditorLineEnds.ttr"。另一个程序正在使用此文件,进程无法访问。
  • 原文地址:https://www.cnblogs.com/LChenglong/p/11777922.html
Copyright © 2020-2023  润新知