zoukankan      html  css  js  c++  java
  • express学习(三)—— cookie和session

    express学习(三)—— cookie和session

     cookie存在浏览器中,最大只能保存4K数据,不安全
    
     session存在服务器中,不能独立(先读取cookie再读取session),较安全
    

    工具

    发送cookie:

    基本的东西先写好:

    const express = require('express');
    
    var server=express();
    
    // cookie
    server.use('/',function(req,res){
       res.cookie('名字', '值', {path: '/aaa/a.html', maxAge: 30*24*3600*1000});  //path指明谁可以访问,‘/aaa/a.html'表示根目录下aaa文件夹中的a.html文件;maxAge表示最长保留时间(以毫秒计)
    })
    
    server.listen(8080)
    

    读取cookie

    接着,用cookie-parser工具

    const express=require('express');
    const cookieParser=require('cookie-parser');
    
    var server=express();
    
    //cookie
    server.use(cookieParser());
    
    server.use('/', function (req, res){ 
      console.log(req.cookies);
    
      res.send('ok');
    });
    
    server.listen(8080);
    

    执行结果:

    但是cookie分为两种,加密的(有签名的)、不加密的(没有签名的)。

    const express=require('express');
    const cookieParser=require('cookie-parser');
    
    var server=express();
    
    //cookie
    server.use(cookieParser('wesdfw4r34tf'));
    
    server.use('/', function (req, res){
      req.secret = 'wesdfw4r34tf';   //有了上面的’server.use(cookieParser('wesdfw4r34tf'));‘,这里的req.secret可以不写。因为cookie会自动传值给secret
      res.cookie('user', 'blue', {signed: true});
    
      console.log('签名cookie:', req.signedCookies,'
    ')
      console.log('无签名cookie:', req.cookies);
    
      res.send('ok');
    });
    
    server.listen(8080);
    

    执行结果:

    一定要把签名的内容告诉cookieParser,如server.use(cookieParser('wesdfw4r34tf'));,否则它不知道解读谁,就会返回很长一串,如图所示的结果:

    删除cookie

    一条语句就足够
    res.clearCookie('名字');

    session

    用到一个中间件:cookie-session:
    npm install cookie-session --save

    const express=require('express');
    const cookieParser=require('cookie-parser');
    const cookieSession=require('cookie-session');
    
    var server = express();
    
    
    server.use(cookieParser());
    server.use(cookieSession({
        name:'my_session',
        keys:['aaa','bbb','ccc'], //数组越长越安全
        maxAge:2*3600*1000  // 保存两小时
    }));
    
    server.use('/',function(req,res){
        if(req.session['count']==null){
            req.session['count']=1;
        }else{
            req.session['count']+=1;        
        }
        console.log(req.session['count'])
    
        res.send('ok');
    })
    
    server.listen(8080);
    

    把密钥数组增大:

    var arr=[];
    for(var i=0;i<100000;i++){
        arr.push('sig_'+Math.random());
    }
    
    
    server.use(cookieParser());
    server.use(cookieSession({
        name:'my_session',
        keys:arr, //用到上面的数组
        maxAge:2*3600*1000  // 保存两小时
    }));
    
    

    总结

    server.use(cookieParser('签名字符串'));
    server.use(cookieSession({
    
    }));
    
    server.use(function (req, res){
    //发送cookie
    	res.cookie(名字, 值, {signed: true});
    
    //读取cookie
    	res.cookies['user']
    	
    //删除cookie
    	res.clearCookie('名字');
    
    //获取session
    	res.session['xxx']
    //删除session
    	delete res.session['xxx'];
    });
    

    为什么delete不可以删除cookie?

    因为cookie存在浏览器端,而session是存在服务器端,所以只有session才可以使用delete方法删除。

  • 相关阅读:
    L1-050 倒数第N个字符串 (15分)
    Oracle存储过程的疑难问题
    Linux的细节
    Linux字符设备和块设备的区别
    Shell变量
    游标的常用属性
    Oracle中Execute Immediate用法
    Oracle中的sqlerrm和sqlcode
    Oracle把一个表的数据复制到另一个表中
    Oracle的差异增量和累积增量
  • 原文地址:https://www.cnblogs.com/n2meetu/p/7979182.html
Copyright © 2011-2022 走看看