目录
一.什么是Cookie
- Cookie是一种在网站和用户之间交换信息的机制。它是由Web服务器发送给用户浏览器的小型文本文件,存储在用户的设备上。当用户访问网站时,浏览器会将Cookie保存在用户的设备上,并在以后的访问中将该Cookie发送回服务器。
- Cookie可以用来存储用户的偏好设置、登录状态、购物车内容等信息。网站可以通过读取Cookie来识别用户,并为用户提供个性化的体验。例如,网站可以根据Cookie中的信息记住用户喜欢的语言、颜色主题或其他个性化设置。
- 然而,Cookie也有一些隐私和安全方面的顾虑。某些Cookie可能会跟踪用户的浏览活动,并在用户离开网站后继续跟踪用户。为了保护用户隐私,现代浏览器通常提供选项,允许用户控制哪些Cookie可以被接受或拒绝,并允许用户删除现有的Cookie。
二.什么是Session
- Session是在Web开发中用于跟踪用户状态和保持用户数据的一种机制。它基于服务端,在用户访问网站时创建一个唯一的会话标识符(session ID),并将该标识符存储在用户的浏览器的Cookie中或者通过URL重写传递。
- 当用户与网站进行交互时,服务器使用会话标识符来识别用户,并在服务器端创建一个与该会话关联的数据存储空间,通常称为会话存储。在会话存储中,可以存储和检索用户相关的数据,比如登录状态、购物车内容、用户首选项等。
- Session的主要优点是存储在服务器端,用户无法直接修改会话数据,因此更安全可靠。此外,由于会话标识符存储在Cookie中,用户在同一浏览器中访问网站的不同页面时会自动携带该标识符,无需显式传递,方便管理。
- 然而,Session机制也存在一些局限性。首先,它依赖于用户浏览器的Cookie支持,如果用户禁用Cookie,会导致Session无法正常工作。其次,由于会话数据存储在服务器内存或数据库等持久化存储中,过多的会话数据可能会增加服务器的负载和存储需求。
- 总之,Session是一种在Web开发中常用的机制,用于维护用户状态和存储用户数据,为用户提供个性化的体验和交互。
三.Cookie的工作流程
我们知道Cookie是浏览器在本地存储数据的一种机制,而它还有个重要的作用,那就是存储用户登录信息,如图,浏览器会向服务器发送请求,服务器会给浏览器发送响应和Set-Cookie,其中,通过Set-Cookie就可以把要保存在本地的数据给发送给浏览器,浏览器接受后,就会把数据存储在特定的文件中,后续浏览器要访问服务器的时候,就会把存在本地的所有Cookie都通过HTTP请求给带过去.
四.Session的工作流程
- 服务器同一时刻收到的请求是很多的. 服务器需要清除的区分清楚每个请求是从属于哪个用户, 就需要在服务器这边记录每个用户令牌以及用户的信息的对应关系.
- Session的本质就是一个 "哈希表", 存储了一些键值对结构. key 就是令牌ID(token/sessionId), value 就是用户信息(用户信息可以根据需求灵活设计).
- Session会给用户分配一个sessionId,同时记录下用户的身份信息,sessionId会被返回到浏览器的Cookie中存储,后续浏览器访问服务器都会带着这个sessionId,从而能够让服务器通过sessionId在哈希表中查找到用户的身份信息了.
- 当用户登陆的时候, 服务器在 Session 中新增一个新记录, 并把 sessionId / token 返回给客户端. (例如通过 HTTP 响应中的 Set-Cookie 字段返回).
- 客户端后续再给服务器发送请求的时候, 需要在请求中带上 sessionId/ token. (例如通过 HTTP 请求中的 Cookie 字段带上).
- 服务器收到请求之后, 根据请求中的 sessionId / token 在 Session 信息中获取到对应的用户信息, 再进行后续操作.
注意:Servlet 的 Session 默认是保存在内存中的. 如果重启服务器则 Session 数据就会丢失.
五.Cookie与Session的区别
- Cookie 是客户端的机制. Session 是服务器端的机制.
- Cookie 和 Session 经常会在一起配合使用.但是,不是必须配合
- 完全可以用 Cookie 来保存一些数据在客户端. 这些数据不一定是用户身份信息, 也不一定是token / sessionId
- Session 中的 token / sessionId 也不需要非得通过 Cookie / Set-Cookie 传递.