node.js的cookie-parser cookie-session express-session 的使用方法

cookie-parser:

1、cookie空间非常小,要省着点用,该签名的签名,不该签名的尽量不用签名
安全性非常差
签名的作用和加密不一样

  1. cookie的创建

express直接提供了api,只需要在需要使用的地方调用如下api即可

App function(req, res, next){  
    res.cookie(name, value [, options]);
}

express就会将其填入Response Header中的Set-Cookie,达到在浏览器中设置cookie的作用。
name: 类型为String
value: 类型为String和Object,如果是Object会在cookie.serialize()之前自动调用JSON.stringify对其进行处理
Option: 类型为对象,可使用的属性如下

domain:cookie在什么域名下有效,类型为String,。默认为网站域名
expires: cookie过期时间,类型为Date。如果没有设置或者设置为0,那么该cookie只在这个这个session有效,即关闭浏览器后,这个cookie会被浏览器删除。
httpOnly: 只能被web server访问,类型Boolean。
maxAge: 实现expires的功能,设置cookie过期的时间,类型为String,指明从现在开始,多少毫秒以后,cookie到期。
path: cookie在什么路径下有效,默认为’/’,类型为String
secure:只能被HTTPS使用,类型Boolean,默认为false
signed:使用签名,类型Boolean,默认为false。express会使用req.secret来完成签名,需要cookie-parser配合使用

用法如下:

res.cookie('name', 'koby', { domain: '.example.com', path: '/admin', secure: true });
//cookie的有效期为900000ms
res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true });
//cookie的有效期为900000ms
res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true });

//cookie的value为对象
res.cookie('cart', { items: [1,2,3] });
res.cookie('cart', { items: [1,2,3] }, { maxAge: 900000 });

res.cookie('name', 'tobi', { signed: true });

2.cookie的删除
express直接提供了api删除浏览器中的cookie,只需要在需要使用的地方调用如下api即可

function(req, res, next){
    ...
    res.clearCookie(name [, options]);
    ...
}

3.利用cookie-parser读取cookie

npm install cookie-parser --save
使用方式:

var express = require('express');
var cookieParser = require('cookie-parser');
var app = express();
//不使用签名
app.use(cookiePareser());

//若需要使用签名,需要指定一个secret,字符串,否者会报错
app.use(cookiePareser('Simon'));

app.get('/',(req,res,next)=>{
	res.cookie('cart', { items: [1,2,3] });
	console.log(req.cookies);
})

cookie-session:

session和基于cookie的。 存在于服务器,相对cookie安全,但session也存在session劫持的风险, 所以需要一串很长很多的秘钥数组来增加破解的难度。同时设置manAge过期时间, 减少留给坏人破解时间。

  const express = require('express');
  const cookieParser = require('cookie-parser');
  const cookieSession = require('cookie-session');
  var app = express();
  app.use(cookieParser());
  
 //cookieSession 必须放在cookieParser后面
 app.use(cookieSession({
     //session的秘钥,防止session劫持。 这个秘钥会被循环使用,秘钥越长,数量越多,破解难度越高。
 keys: ['aaa', 'bbb', 'ccc'],
 //session过期时间,不易太长。php默认20分钟
 maxAge: 60*60,
 //可以改变浏览器cookie的名字
 name: 'session'
}));
app.use('/', function (req, res) { 
//假设使用count记录用户访问的次数
if(req.session['count'] == null) {
    req.session['count'] = 1;
}else{  
   req.session['count']++;
}
console.log(req.session['count'])//通过键值对的方式可以获取到session
res.send('ok')
})
app.listen(8080)

express-session:

express-session 是基于express框专门用于处理session的中间件。session的认证机制离不开cookie,需要同时使用cookieParser 中间件。

var express = require('express');
var session = require('express-session');
var cookieParser = require('cookie-parser');
var app = express();
app.use(cookieParser());
app.use(session({
  secret: '12345',
  name: 'testapp',  //这里的name值得是cookie的name,默认cookie的name是:connect.sid
  cookie: {maxAge: 80000 }, //设置maxAge是80000ms,即80s后session和相应的cookie失效过期
  resave: false,
  saveUninitialized: true,

}));

app.get('/awesome', function(req, res){
  if(req.session.lastPage) {
    console.log('Last page was: ' + req.session.lastPage + "."); 
  } 
  req.session.lastPage = '/awesome'; 
  //每一次访问时,session对象的lastPage会自动的保存或更新内存中的session中去。
  res.send("You're Awesome. And the session expired time is: " + req.session.cookie.maxAge);
});

 
app.get('/radical', function(req, res){
  if (req.session.lastPage) {
    console.log('Last page was: ' + req.session.lastPage + "."); 
  }
  req.session.lastPage = '/radical';
  res.send('What a radical visit! And the session expired time is: ' + 				     req.session.cookie.maxAge);
});

app.get('/tubular', function(req, res){
  if (req.session.lastPage){
    console.log("Last page was: " + req.session.lastPage + "."); 
  }
  req.session.lastPage = '/tubular';
  res.send('Are you a suffer? And the session expired time is: ' + req.session.cookie.maxAge);
});

app.listen(5000);

一旦我们将express-session中间件用use挂载后,我们可以很方便的通过req参数来存储和访问session对象的数据。req.session是一个JSON格式的JavaScript对象,我们可以在使用的过程中随意的增加成员,这些成员会自动的被保存到option参数指定的地方,默认即为内存中去。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值