初窥nodejs(七) ——cookie$session

来源:互联网 发布:工程项目管理软件 知乎 编辑:程序博客网 时间:2024/06/08 12:02

cookie$session简介

不安全、有限(4K)
在浏览器保存一些数据,每次请求都会带过来。用户可以通过浏览器直接修改数据。

session

安全、无限
在服务端保存数据,session是基于cookie实现的。
cookie中会有一个session的ID,服务器利用sessionid找到session文件,进行数据的读取、写入。
隐患:session劫持

cookie发送

cookie的发送可以通过res.cookie()函数实现
const express=require('express');var server=express();//cookieserver.use('/aaa/a.html', function (req, res){  res.cookie('user', 'blue', {path: '/aaa', maxAge: 30*24*3600*1000});  res.send('ok');});server.listen(8080);

res.cookie(‘user’, ‘blue’, {path: ‘/aaa’, maxAge: 30*24*3600*1000});

res.cookie有4个参数:'user':键'blue':值path: '/aaa',表示cookie在/aaa路径下maxAge: 30*24*3600*1000,maxAge表示cookie生存周期,单位为毫秒。这里是一个月。

cookie读取

这里需要借助中间件cookie-parser

它的作用是捕获cookie并赋值给req.cookies
const express=require('express');const cookieParser=require('cookie-parser');var server=express();//cookieserver.use(cookieParser());server.use('/', function (req, res){  console.log(req.cookies);  res.send('ok');});server.listen(8080);

cookie签名

cookie签名使得具有不可抵赖性。
const express=require('express');const cookieParser=require('cookie-parser');var server=express();//cookieserver.use(cookieParser('wesdfw4r34tf'));server.use('/', function (req, res){  req.secret='wesdfw4r34tf';  res.cookie('user', 'blue', {signed: true});  console.log('签名cookie:', req.signedCookies)  console.log('无签名cookie:', req.cookies);  res.send('ok');});server.listen(8080);
req.secret='wesdfw4r34tf';                  设置签名密钥res.cookie('user', 'blue', {signed: true}); 发送具有签名密钥的cookiereq.signedCookies;                          获得所有已签名的密钥res.clearCookie('user');                    清除浏览器的cookie user

cookie加密

cookie是存在于浏览器的,cookie加密本身就不具有安全性。这里不加讨论

session中间件

session是基于cookie的,需要使用两个中间件:cookie-parser和cookie-sessioncookie-session是强制要求设置密钥的

session密钥

    为了安全起见,session的密钥我们一般不会只指定一个,而是会设置一个数组key,里面存放上万个密钥。    而且密钥可以是随机生成且定时修改的,这无疑大大提高了破解难度。
const express=require('express');const cookieParser=require('cookie-parser');const cookieSession=require('cookie-session');var server=express();//cookieserver.use(cookieParser());server.use(cookieSession({  keys: ['aaa', 'bbb', 'ccc']//以三个密钥为例}));server.use('/', function (req, res){  console.log(req.session);  res.send('ok');});server.listen(8080);

使用session

const express=require('express');const cookieParser=require('cookie-parser');const cookieSession=require('cookie-session');var server=express();//cookieserver.use(cookieParser());server.use(cookieSession({  name: 'sess',  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']++;  }  console.log(req.session['count']);  res.send('ok');});server.listen(8080);

server.use(cookieSession({name: ,keys:[],maxAge:,}));

cookieSession有三个参数:name: session名,存在cookie中keys:密码组合maxAge:生存周期,单位为毫秒
原创粉丝点击