nodeJs学习-08 cookie、session

时间:2024-01-16 09:08:44

http-无状态的:两次访问之间,无区别,cookie可解决

cookie:在浏览器保存一些数据,每次请求都会带过来;

  弊端:可以查看修改,并不安全、大小有限(4K)

  读取--cookie-parser

  发送--

  

session:保存数据,保存在服务端,更加安全,大小无限

  基于cookie实现,通过cookie读取session值;cookie中会有一个session的ID,服务器利用session_id找到session文件、读取、写入

  隐患:session劫持--cookie加密、定期更换等

  cookie-session

1、发送cookie

  res.secret(签名);

  res.cookie(名字,值,{path:'/',maxAge:毫秒单位的有效期,signed:true}

2、读取cookie

  依赖cookie-parser 中间件  签名

    cookie-encrypter 中间件  加密

  server.use(cookieParser('asgewrwrfsf'));    //签名秘钥  必须和req.secret的一致  
  console.log('未签名的cookie:',req.cookies);   
  console.log('签名的cookie',req.signedCookies);
3、删除cookie
  res.clearCookie(名字)
const express = require('express');
const cookieParser = require('cookie-parser'); //读取cookie使用 var server = express();
server.listen(8080); server.use(cookieParser('asgewrwrfsf')); //签名秘钥 必须和下面req.secret的一致,才能解析正确,下面无需重新声明 server.use('/',function(req,res){
//req.secret = 'asgewrwrfsf'; //签名秘钥
res.cookie('user','userName',{ //存cookie,发送cookie
path:'/aaa/a.html', //此目录下才能访问
maxAge:30*24*2600*1000, //有效期 30天
signed:true, //签名 ,依旧可以看见,但是可以防止篡改
}); //读取cookie,需要依赖cookie-parser中间件,分开接收
console.log('未签名的cookie:',req.cookies);
console.log('签名的cookie',req.signedCookies); // res.clearCookie('user',{path:'/aaa/a.html'}); //删除cookie res.send('ok');
})

session读写:

  依赖cookie-session中间件,cookie-parser

  session劫持预防,key必须设置

const express = require('express');
const cookieParser = require('cookie-parser'); //读取cookie使用
const cookieSession = require('cookie-session'); var server = express();
server.listen(8080); server.use(cookieParser());
var arr = [];
for(var i=0;i<100000;i++){
arr.push('sig_'+Math.random());
};
server.use(cookieSession({
name:'se',
keys:arr, //防session劫持
maxAge:24*3600*1000, //有效期
})); server.use('/',function(req,res){
console.log(req.session);
if(req.session['count'] == null){
req.session['count'] = 1;
}else{
req.session['count']++;
}
 
 //删除session
 //delete req.session
res.send('ok2');
})