cookie-parser 插件:cookie解析,加密的操作
cookie-session 插件:session 的解析操作
http 是无状态的
cookie:在浏览器保存一些数据,每次向服务器发送请求的时候,都会带过来
使用 cookie 的缺点:不安全,大小限制 4kb
session:保存数据用的,保存在服务器
使用 session 的优点:安全,没有大小限制
session 的工作原理
session 基于 cookie 实现的,不能独立实现,cookie 中会有一个 session 的 id ,而这个服务器,利用 session 的 id,找到 session 的 id,读取写入等等
隐患:session 劫持,随时更改 session ,加密 cookie
cookie:
let express = require("express");
let cookieParser = require("cookie-parser");
let server = express();
server.listen(3000); // 先创建一个服务器
server.use(cookieParser('jsdkfjsidfj')); // 需要靠此来解析 cookie 里面的参数:可选,用来加密 cookie ,为了安全,参数是随便写,想写什么写什么
server.use("/",function(req,res){
console.log(req.cookies); // 从浏览器中得到的 cookie
console.log(req.signedCookies) // 未签名版的密钥,也就是说没有经过加密
res.cookie('user','blue',{ // 从服务器响应到浏览器中的 cookie
path:"/", // cookie 的路径
maxAge:24*3600*1000, // cookie 的持续时间 24 小时
signed:true // 签名 签名的作用,不能修改,也就是说用户只能看,但是不能改 cookie 里的东西
})
res.clearCookie('user') // 删除 cookie 里面的参数:user ,这是我的 cookie ,大家可以根据自己的情况来定
})
session:
是基于 cookie 实现的,cookie 的升级版,与 cookie 相比,更安全,且没有大小限制
let express = require("express");
let cookieParser = require("cookie-parser");
let cookieSession = require("cookie-session");
let server = express();
server.listen(3000); // 创建的服务器
// 为了使 session 更安全
let arr = [];
for(let i=0;i<100000;i++){
arr.push('sig'+Math.random()) // 此时的 arr 是有多么恐怖,因为 密钥使循环使用的,当别人破了你一个密钥后,
}
server.use(cookieParser()); // 解析 cookie
server.use(cookieSession({ // 是的,想使用这个插件,必须使用 cookieParser 来先将 cookie 解析了
name:"sess", // 设置了 session
keys:arr, // 密钥,必填,循环使用 cookie 的密钥,一定程度上保证了安全
maxAge:2*3600*1000 // 2 小时,session 的存储时间 2 小时
}))
server.use("/",function(req,res){
console.log(req.session) // 读取 session
res.send("ok");
})
// 判断用户访问了几次网站之类的
server.use("/",function(req,res){
if(req.session[cont]==null){ // 证明用户使第一次来
req.session[cont] = 1 ; // 所以给他计数为 1
}
else{
req.session[cont]++; // 之后每次访问都累加
}
console.log(req.session[cont]) // 这个就是用户总共访问的次数
res.send("ok");
})