express学习—— cookie和session

Posted SingSingaSong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,‘\n‘)
  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方法删除。





以上是关于express学习—— cookie和session的主要内容,如果未能解决你的问题,请参考以下文章

nest.js学习静态资源配置和模板引擎+服务Service+cookie+session

express 引入cookie

Node Express 操作( Cookie 和 Session )

express4里要单独安装cookie-parser和express-session

Cookie与Session

express-session 和 cookie-session 有啥区别?