zoukankan      html  css  js  c++  java
  • 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'); })

      

     
  • 相关阅读:
    C#学习记录二:高级数据存储方式
    SharePoint 2010 匿名用户调用Client Object Model访问列表项
    Android 在闹钟开机时,如何解决开机动画没有播完就进入Launcher M
    Getting in Line UVA 216
    Android 如何关闭Navigation Bar M
    google protocol buffer 简介 版本 安装 使用 实例
    Android [VP]视频播放器播放本地视频时收到短信/彩信,需要界面提示 M
    Maven教程初级篇02:pom.xml配置初步
    当Ruby的model名字出错时,在现实view时显示错误的提示
    VS Code 安装 C++ 调试环境
  • 原文地址:https://www.cnblogs.com/LChenglong/p/11777922.html
Copyright © 2011-2022 走看看