浅谈 Session 和 Cookie

/ 0评 / 0

为什么需要 Session 和 Cookie

HTTP 请求是无状态的,这也就意味着浏览器收到一个请求,只知道要做什么任务,却不知道是任务发布者是谁。举个例子,用户想要查看购物车信息,如果没有 Session,服务器就无法知道查看哪个用户的购物车,也就无法给出准确的答复。
Cookie 的数据保存在客户端,可通过浏览器进行查看;Session 的数据保存在服务端,相比较而言更加安全,但如果数据过多,会影响运行效率。

Session 和 Cookie 的合作

当浏览器发出一个请求时,Session 随之建立,同时返回给浏览器的 response 中包含Set-Cookie 字段,通常该字段中会存在 session_id(sid)值。浏览器收到 response 后,会根据 Set-Cookie 字段设置 Cookie,下一次发送请求时,会自动携带该 Cookie。
这样,下一次服务端收到请求后,根据 sid 找到对应 Session,从而也就找到了该会话的一系列状态信息,例如当前登录的用户等等。这也就解决了 HTTP 请求无法保存状态信息的问题。如果遇到浏览器禁止 Cookie 的情况,也可将 sid 附加到 url 中。
以下为本人猜测内容,未经考证。在成熟 Web 框架,例如 SSM 中,Controller 收到请求会根据 sid 自动解析 Session,因此可以通过 request.getSession() 函数直接获取 Session 信息,而不需关心与 Session 相关的底层操作。

如何实现“保持登录状态”这一功能

有些时候,我们需要实现这样一个功能,即退出浏览器下次访问该网站时,可以自动登录,不需要重新输入用户名和密码。这一功能的实现就依赖于 Session 和 Cookie。

发表评论

邮箱地址不会被公开。 必填项已用*标注