码迷,mamicode.com
首页 > 其他好文 > 详细

express学习(三)—— cookie和session

时间:2017-12-04 23:44:42      阅读:405      评论:0      收藏:0      [点我收藏+]

标签:执行   获取   https   let   表示   count   方法   blog   +=   

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

标签:执行   获取   https   let   表示   count   方法   blog   +=   

原文地址:http://www.cnblogs.com/n2meetu/p/7979182.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!