【问题标题】:Storing data as a cookie in the browser vs. session将数据作为 cookie 存储在浏览器与会话中
【发布时间】:2014-01-09 23:20:07
【问题描述】:
我正在努力学习更多关于 JAVA Web 开发的知识。我主要专注于尝试了解用户输入的数据(可能通过填写多页表单的过程)是如何在用户从一个页面移动到另一个页面时进行管理的。
根据我收集的信息,您可以在服务器端的会话中存储数据。我还在了解存储在浏览器中的 cookie。是否有一个通用规则用于确定哪些数据应存储在 cookie 中,以及何时应将数据存储在会话中(session.setAttribute),还是这些完全不同的概念?
谢谢
【问题讨论】:
标签:
java
jakarta-ee
cookies
【解决方案1】:
session/cookies 的基本原理是这样的。
会话通常是服务器存储用户数据的一种方式。这可以通过多种方式完成,从内存、文件到数据库。当用户在您的网站上跳来跳去时,您可以使用此会话存储几乎所有您需要的东西。它被分配了一个 ID(会话 ID),您通常不需要过多担心。在大多数 Web 语言中,您可以使用某些功能轻松访问用户会话,而无需处理 ID。
现在,由于网络是无状态的 - 这意味着实际上无法知道访问页面 A 的用户与访问页面 B 的用户相同,因此我们要确保用户随身携带他们的会话 ID。这可以通过多种方式完成,但最常见的一种是通过使用会话 cookie,它是由服务器自动设置的特殊 cookie,仅用于传递会话。它也可以在 URL 中传递(我相信你已经看到过 index.php?sessid=01223.. 之类的东西)以及标题等。
当大多数人谈论向 cookie 添加信息时,他们不是在谈论会话 cookie,而是在谈论您专门设置的自定义 cookie。您想要这样做的唯一原因是您需要在会话生命周期之外存储信息(当浏览器关闭时结束)。许多网站的“记住我”功能就是一个很好的例子。
所以使用会话,除非你需要让某件事持续很长时间。
【解决方案2】:
是的。实际上有一些规则。其一,浏览器在每次请求时都会发送 cookie 数据;会话数据保存在服务器上(而不是每次请求都重新传输)。但是,通常会话 id 与 cookie 一起使用。这使服务器能够识别客户端。