gpt4 book ai didi

java - JAVA中的 session 管理 : Basic Doubts

转载 作者:行者123 更新时间:2023-12-01 17:10:28 26 4
gpt4 key购买 nike

我对 Java 中的 session 管理感到困惑。当我浏览 session 创建时,我在网络上找到了不同的答案,这些答案在各自的上下文中都是正确的。我有几个基本问​​题。

1) 在发出第一个 HTTP 请求时,浏览器是否创建一个 session ID,并将其发送到服务器,或者当来自浏览器的 HTTP 请求到达服务器时,服务器第一次创建一个 session ID session ID?

2) JSessionID 是 session ID 吗?如何在浏览器中设置此 ID(即服务器和浏览器之间传递的 header )?这个ID是如何在服务器中设置的(在服务器内部)?

3) 如果服务器/浏览器在第一个 HTTP 请求时创建了 session ID,那么 HttpServletRequest.getSession(true) 方法何时执行什么操作?该方法有什么用?

4) 来自服务器的 sessionId 是作为单独的 header 传递还是在 Cookie header 中传递?

如果浏览器中禁用了cookie,并且服务器通过任何方式(单独的 header 或Cookies header 或任何其他形式)传递了sessionId(我猜是JSessionId),那么浏览器会做什么?在这种情况下 session 是如何建立的?

我们是否明确需要编写代码以在服务器端附加 sessionId 作为查询参数?

我们如何在服务器端检查浏览器是否禁用了cookie?

最佳答案

  1. session ID 始终由服务器创建。但如果浏览器需要,它可以将其切换为其他 ID,而服务器几乎没有办法找到它(这就是为什么 session ID 应该很难猜测并且是随机生成的)

  2. 只有当您(程序员)第一次尝试使用 session 时,服务器才会创建 session ID。重载getSession方法在那里,因此您可以探测 session 是否存在,而无需创建 session 。

  3. session ID 必须由服务器发送(至少一次)到客户端,并由客户端返回(对于每个请求)。有很多方法可以做到这一点(您可以将不同的方法视为插件,具体的技术对于实际的 session 对象并不重要)。

通常的方式是:

  • 通过cookie; cookie 值的名称可能是 JSESSIONID,但也可能是其他名称(可配置)。创建 session 时,服务器发送 Set-Cookie标题(仅一次)。从那时起,由于 cookie 的工作原理,浏览器将 cookie 值附加到标准 Cookie 中。 header ;

  • 通过请求参数。服务器必须将参数附加到每个 URL (GET) 并作为隐藏字段附加到每个表单(GET 或 POST)。自动化这个过程并不容易(因为表单和链接可以由不同的库和应用程序片段生成),这主要取决于程序员。但某些技术(如 JSP)支持添加此参数(如 JSTL 中的 <c:url>)。如果您使用其他一些演示技术或为自己生成网址,则必须检查它是如何工作的。

    1. 由于某些代理不支持 cookie(坦率地说,客户端既需要 session 又不支持 cookie 的想法相当过时),因此有一个巧妙的技巧:创建 session 时,JSP 尝试发送 session ID 有两种方式:通过 cookie(无论您使用什么前端技术,这都有效)和通过参数。当返回答案时,可以验证cookie的存在(如果有参数但没有cookie - 那么客户端不支持cookie,JSP将尝试通过参数发送 session ;如果设置了cookie,那么参数就不是必需的)。

关于java - JAVA中的 session 管理 : Basic Doubts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23974035/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com