cookie
cookie介绍
Cookie是一种在Web浏览器和Web服务器之间传递的小文件,用于存储用户的一些状态信息,如登录信息、用户偏好等。当用户访问一个网站时,网站会将一个包含Cookie信息的HTTP响应头发送给浏览器,浏览器将这些Cookie保存在用户的本地计算机上,下次用户访问该网站时,浏览器会自动将这些Cookie发送给服务器,服务器据此来识别用户。
cookie特点
- Cookie是存储在客户端的小文件,通常大小不超过4KB;
- Cookie可以通过设置过期时间来控制其有效期;
- Cookie可以在服务器端和客户端之间传递数据,但是数据会明文存储在客户端上,存在安全隐患;
- Cookie受浏览器的限制,不同浏览器对Cookie的数量和大小有不同的限制。
cookie原理
Cookie是通过设置HTTP响应头中的Set-Cookie字段来创建的,浏览器会自动将这些Cookie保存在用户的本地计算机上,并在下次用户访问该网站时将这些Cookie发送给服务器。
-
服务器发送Cookie
当用户第一次访问一个网站时,服务器会在HTTP响应头中设置Set-Cookie字段,该字段包含了一个Cookie的名称、值、过期时间、作用域等信息。 -
浏览器保存Cookie
浏览器收到服务器发送的Set-Cookie字段后,会将这些Cookie保存在用户的本地计算机上。浏览器根据服务器发送的Set-Cookie字段中的过期时间来决定Cookie的有效期,如果没有设置过期时间,则默认为当前会话期间。 -
浏览器发送Cookie
当用户再次访问该网站时,浏览器会自动将保存在本地的Cookie发送给服务器。浏览器会在HTTP请求头中设置Cookie字段,该字段包含了所有与该网站相关的Cookie信息。 -
服务器处理Cookie
服务器收到浏览器发送的Cookie后,会将其解析出来,并根据Cookie中的信息进行相应的处理。服务器可以使用Cookie来识别用户、存储用户偏好等信息。
session介绍
什么是session
Session是一种在Web应用服务器端维护用户状态的机制,用于存储用户的一些状态信息,如登录信息、购物车内容等。当用户访问一个网站时,网站会在服务器端创建一个Session,并分配一个唯一的Session ID,将这个Session ID通过Cookie等方式传递给客户端浏览器,下次用户访问该网站时,浏览器将这个Session ID带回服务器端,服务器据此来识别用户。
session特点
- Session是存储在服务器端的,通常会存储在内存或者数据库中,因此相对于Cookie更加安全;
- Session可以通过设置过期时间来控制其有效期;
- Session可以存储比Cookie更大的数据量;
- Session对客户端没有大小限制,因为只有一个Session ID存储在客户端中。
需要注意的是,Session和Cookie都可以用于存储用户状态信息,但它们的实现方式和使用场景不同。在一些安全性要求较高的场景下,Session会更加适合。在需要跨域共享数据的场景下,Cookie会更加适合。
session原理
-
创建Session
当用户第一次访问一个网站时,服务器会为该用户创建一个Session,并生成一个唯一的Session ID。Session ID可以通过Cookie等方式传递给客户端浏览器,以便下次用户访问该网站时能够自动识别该用户。 -
Session ID传递
服务器将Session ID传递给浏览器,通常是通过Cookie方式来传递。服务器会在HTTP响应头中设置Set-Cookie字段,该字段包含了Session ID等信息。 -
浏览器发送Session ID
当用户再次访问该网站时,浏览器会自动将保存的Session ID发送给服务器。浏览器会在HTTP请求头中设置Cookie字段,该字段包含了保存的Session ID等信息。 -
服务器处理Session
服务器收到浏览器发送的Session ID后,会根据Session ID来查找相应的Session。服务器可以使用Session来存储用户的登录信息、购物车内容等状态信息,以便下次用户访问该网站时能够继续使用这些状态信息。
前后端分离不推荐session的原因
-
分离了前后端的职责
前后端分离的项目中,后端只负责提供API接口,不再涉及页面渲染等操作,因此不需要使用Session来维护用户的状态信息。前端通过调用后端API来获取数据,后端根据前端传递的Token进行用户身份验证,并根据Token中携带的用户信息来返回对应的数据。 -
Session数据难以分布式管理
在分布式系统中,多个服务器之间需要共享Session数据,需要进行相应的同步和管理。这增加了系统的复杂性和开发难度。 -
Session容易引发跨域问题
使用Session来维护用户状态时,需要将Session ID存储在Cookie中,但是Cookie会受到浏览器的限制,容易引发跨域问题。 -
增加了系统的开销
使用Session需要在服务器端存储Session数据,增加了服务器的负担。如果是高并发系统,这些开销会更加明显。 -
不易扩展
使用Session方式维护用户状态时,随着业务的增长,Session中存储的信息也会不断增加,这会导致Session数据量变大,不易扩展。
综上所述,前后端分离的项目中,推荐使用Token来维护用户的状态信息,而不是Session。Token具有轻量级、无状态、易扩展等优点,更适合前后端分离的开发模式。
参考链接