这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战
前言
今天我们来谈一谈我们经常接触到的cookie和session。其两者的区别以及相似之处我们可以进行规范对比,对两者有更好的理解,在运用中也可以更得心应手,今天小编来总结一下。
cookie
cookie 是存储于访问者的计算机中的变量(浏览器中)。可以让我们用同一个浏览器访问同一个域 名的时候共享数据。(注意是同一个域名下的)。
HTTP 是无状态协议。简单地说,它没有那么机灵,当你浏览了一个页面,然后转到同一个网站的另一个页 面,服务器无法认识到这是同一个浏览器在访问同一个网站。每一次的访问,都是没有关系的。
Cookie 是一个简单到爆的想法:当访问一个页面的时候,服务器在下行 HTTP 报文中,命令浏览器存储一个字符串; 浏览器再访问同一个域的时候,将把这个字符串携带到上行HTTP 请求中。第一次访问一个服务器,不可能携带 cookie。 必须是服务器得到这次请求,在下行响应报头中,携带 cookie 信息,此后每一次浏览器往这个服务器发出的请求,都会携带这个 cookie。
cookie的特点
-
cookie 是保存在本地浏览器的
-
正常设置的 cookie 是不加密的,用户可以任意看到;
-
用户可以删除 cookie,或者禁用它
-
cookie 可以被修改
-
cookie 也可以用于攻击
-
cookie 存储量很小。
session
session 是和cookie不一样的记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而session 保存在服务器上。(这是本质的区别)Cookie 数据存放在客户的浏览器上,Session 数据放在服务器上。Session 相比 Cookie 要更安全一些。由于 Session 保存到服务器上,所以当访问量增多的时候,会比较占用服务器的性能。单个 cookie 保存的数据大小不能超过 4K,很多浏览器都限制一个站点最多保存 20个 cookie。Session 没有这方面的限制。也就是说Session 是基于 Cookie 进行工作的。
当浏览器访问服务器并发送第一次请求时,服务器端会创建一个 session 对象,生成一个类似于 key,value 的键值对, 然后将 key(cookie)返回到浏览器(客户)端,浏览器下次再访问时,携带 key(cookie),找到对应的 session(value)。这也就是为什么说Session 是基于 Cookie 进行工作的。
session的特点
- session保存在服务器
- session安全性相对较高
- session存储量大
cookie和session使用的区别 我以它们两者在express框架中的使用为例子,给大家示范一下它们的使用上的区别
//cookie的使用
1.安装
cnpm instlal cookie-parser --save
2.引入
var cookieParser = require('cookie-parser');
3.设置中间件
app.use(cookieParser());
4.设置 cookie
res.cookie("name",'zhangsan',{maxAge: 900000, httpOnly: true});
5. 获取 cookie
req.cookies.name
//session的使用(一般都是和数据库一起使用(我们以MongoDB举例))
1.需要安装
express-session 和 connect-mongo 模块
2.引入模块
var session = require("express-session");
const MongoStore = require('connect-mongo')(session);
3.配置中间件
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
rolling:true,
cookie:{
maxAge:100000
},
store: new MongoStore({
url: 'mongodb://127.0.0.1:27017/student',
touchAfter: 24 * 3600 // time period in seconds
})
}))
它们两者的关系也清除了,session是基于cookie实现的,两者存储的位置也不一样。