今天就来聊一聊cookie和session

1,058 阅读4分钟

cookie

因为http协议是无状态(没有记忆功能)的协议,当我们的系统使用了cookie或session技术后可以让我们的系统有记忆功能。

Cookie的产生也是HTTP的特点所决定的。HTTP协议有一个非常重要的特点是无状态的,也就是说当客户端请求服务器,每一个请求和响应结束以后,这次的连接是马上断开的(也是为了释放资源)。同时服务器是不保留连接者相关的信息。这就说明了,Cookie要解决HTTP无状态的问题。

通常Cookie用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie 使基于无状态的HTTP协议记录稳定的状态信息成为了可能。

Cookie 主要用于以下三个方面:

会话状态管理(如用户登录状态、购物车等其它需要记录的信息) 个性化设置(如用户自定义设置、主题等) 浏览器行为跟踪(如跟踪分析用户行为等) 3-7cookie的现实场景.jpg

cookie的特点

  1. cookie不可跨域
  2. cookie存储在浏览器里面
  3. cookie有数量与大小的限制
  4. 数量在50个左右
  5. 大小在4kb左右
  6. cookie的存储时间非常灵活
  7. cookie不光可以服务器设置(用set-cookie),也可以客户端设置

cookie的实现原理

3-8Cookie实现流程.jpg

session

Session是另一种记录用户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。当服务端使用Session后,那么服务器会把Session信息存储在服务器上,同时Session标识也会记录在对应客户端上。

Cookie机制在最初和服务端完成交互后,保持状态所需的信息都将存储在客户端,后续直接读取发送给服务端进行交互。

Session代表服务器与浏览器的一次会话过程,并且完全由服务端掌控,实现分配ID、会话信息存储、会话检索等功能。

Session机制将用户的所有活动信息、上下文信息、登录信息等都存储在服务端,只是生成一个唯一标识ID发送给客户端,后续的交互将没有重复的用户信息传输,取而代之的是唯一标识ID,暂且称之为Session-ID吧。

3-12session的现实场景.jpg

session的特点

  1. Session存储在服务器
  2. 依赖cookie
  3. 可以存储任意类型
  4. 通过客户端的sessionid标识符区分Session
  5. Session没有大小限制

session的实现原理

session.png

3-14Session实现流程.jpg

cookie与session的区别

  1. cookie存储在客户端、相对不安全,session存储在服务端、相对安全;
  2. cookie默认有效时间为整个有效会话期间,但设置有效时间,session不能设置有效时间,session默认有效时间为整个有效会话期间;有效会话期间指打开浏览器开始访问某个系统到关闭整个浏览器之前的这段时间。
  3. cookie有大小限制(在4KB左右)及个数限制(每个域名可以存放的个数在20个至50个之间),session没有限制
  4. 浏览器可以禁用cookie,但session没有这方面的限制;
  5. 不同的浏览器之间不共享Cookie、session;
  6. 存储Cookie、session后在整个项目中有效(页面之间共享)

cookie与session的联系

session依赖cookie,因为session的id存放在客户端的cookie中。

cookie/session使用注意事项

  1. cookie大小有限制 4k
  2. cookie不能跨浏览器
  3. cookie不支持中文
  4. 如果是安全性较高的数据应存放在session中,因为cookie存放在客户端总会轻易被不法分子获取
  5. 如果是访问量特别大的网站,尽量不要在session中存储用户数据,因为每个用户存一个session会给服务器造成很大的压力

cookie-session的下载

不管是设置session还是获取session都要使用第三方中间件cookie-session:

在项目根目录下安装cookie-session:

中文文档参考地址:www.expressjs.com.cn/resources/m…

这是我的第一篇文章哦,还请大家多提意见和建议!