目录
cookie与session的基本概念与特性在之前的博文中已经有所介绍,所以这里就只简单的写一下express中cookie与session的设置与获取.
1.cookie
HTTP是无状态的链接, 你请求一个网页结束以后,此时你和服务器之间没有任何关系了,没有数据持续通路,下一次访问,服务器是不知道你来过的,所以在HTTP最初的版本,就设计了一个cookie的东西,简单说就是服务器在response的响应头中设置一个set-cookie的报文头今后浏览器要遵循一个协议,每次访问这个服务器的时候,都要带着cookies字段上去.
1.1 设置cookie
今后浏览器要遵循一个协议,每次访问这个服务器的时候,都要带着cookies字段上去
值得注意的是通过响应头设置cookie信息,而不是请求头
app.get('/',(req,res)=>{
//设置cookie
res.cookie('name',"why",{
maxAge:2*60*1000,
httpOnly:true
});
res.send('首页');
})
在请求头中可以看到我们设置的cookie,因此我们就可以通过请求头来拿到我们设置的cookie信息
1.2 获取cookie
1.通过请求头获取cookie
//通过请求头来获取cookie信息
console.log(req.headers.cookie);
//name=why
通过请求头我们获取的是字符串,我们需要自己处理成为对象 .
2.通过第三方模块来获取cookie
我们可以使用第三方模块cookie-parser,这个包就是用来格式化cookie的显示,只有装了这个依赖之后,服务器才能更好的读取cookie.
安装第三方包
npm install -s cookie-parser
cookie-parse是一个中间件,可以通过use去使用
const cookieparser = require("cookie-parser")
app.use(cookieparser())
然后就可以通过req.cookies()拿到这个数据
app.get("/",function(req,res){
console.log(req.cookies);
res.send("首页 ")
})
//得到的cookie是键值对的形式
//{ name: 'why' }
1.3 cookie的缺点
cookie的缺点: 就是不安全,(cookie 可以自由被篡改,并且是明文保存的) 所以要不就是通过加密处理,或者我们可以使用session
2.session
session依赖cookie,是一种特殊的cookie,通常用于制作登录验证
session运行在服务器端,当客户端第一次访问服务器时,可以将客户的登录信息保存。
当客户访问其他页面时,可以判断客户的登录状态,做出提示,相当于登录拦截。
HTML5没有替代session办法,所以session估计还要一直流行下去
session最大的好处就是对开发人员透明,开发人员只需要使用session而不需要在意他的原理,甚至不需要知道他是如何辨别每个人的.
使用session需要是用一个express-session中间件
安装中间件express-session
npm install -s express-session
引入express-session
const session = require("express-session")
2.1配置session
app.use(session({
secret: 'keyboard cat', // 加密字符串会通过这个字符串进行加密,自己可以设置
cookie: {maxAge:6000}, // 设置过期时间,也可以在里面设置其他的想要的cookie属性
resave: true, // 即时session 没有被修改, 也保存session值, 默认为true
saveUninitialized:true, // 无论有没有session cookie 每次请求都设置个session cookie 默认标示为 connect.sid
rolling: true // 属性cookie的时间
}))
2.2设置session
app.get('/',(req,res) => {
// 设置session
req.session.user = {name:'why',age:18}
res.send("首页")
})
2.3 获取session
console.log(req.session)
/*
Session {
cookie: {
path: '/',
_expires: 2020-04-28T02:55:55.611Z,
originalMaxAge: 119999,
httpOnly: true
},
user: { name: 'why', age: 18 }
}
*/
通过这种方式我们就可以拿到之前设置的cookie信息了
使用session的时候服务器会在内存中(内存条,不是硬盘,不是数据库)缓存你的一些信息,哈希结构(hash结构,k-v对结构),然后通过cookie发给前端一个乱码,持有这个cookie乱码的人访问这个服务器,服务器会通过乱码匹配拿到这个用户在内存中缓存的值,服务器就只到你的值是多少.
程序员编程的时候是感觉不到session在工作,任何语言中都是一样
3. Cookie和Session区别
1、cookie 数据存放在客户的浏览器上,session 数据放在服务器上。
2、cookie 不是很安全,别人可以分析存放在本地的 cookie 并进行cookie欺骗 考虑到安全应当使用 session。
3、session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能 考虑到减轻服务器性能方面,应当使用 cookie。
4、单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie。