gpt4 book ai didi

java - Java session 管理的最佳选择

转载 作者:IT老高 更新时间:2023-10-28 20:29:08 26 4
gpt4 key购买 nike

Java 中管理 session 的最佳方式。我听说 cookie 不是可靠的选择,因为它们存储在浏览器中,以后可以访问?这个对吗?如果可能,请通过编码示例给出答案。

哪个是最好的:

  • URL重写:服务器会在URL链接的末尾添加一个额外的参数
  • 表单中的隐藏参数:服务器将在 HTML 中的每个表单中添加一个附加参数
  • cookie:服务器会要求浏览器维护一个cookie。

最佳答案

session 管理(客户端识别、cookie 处理、保存 session 范围数据等)基本上已经由应用服务器本身完成。你根本不需要担心它。您可以通过 HttpSession#setAttribute() 在 session 中设置/获取 Java 对象。和 #getAttribute() .只有当客户端不支持 cookie 时,您真正需要注意的是 URL 重写。然后它会将 jsessionid 标识符附加到 URL。在 JSP 中,您可以使用 JSTL 的 c:url为了这。在 Servlet 中可以使用 HttpServletResponse#encodeURL()为了这。这样服务器就可以通过读取新的请求 URL 来识别客户端。

您的新问题可能是“但是 cookie 是如何与此相关的?服务器是如何完成这一切的?”。好吧,答案是这样的:如果服务器收到来自客户端的请求并且服务器端代码(您的代码)试图获取 HttpSessionHttpServletRequest#getSession()虽然还没有创建一个(新 session 中的第一个请求),但服务器将自己创建一个新的。服务器将生成一个长的、唯一且难以猜测的 ID(您可以通过 HttpSession#getId() 获得的 ID)并将此 ID 设置为名称为 jsessionid 的 cookie 的值。服务器在后台使用 HttpServletResponse#addCookie()为了这。最后,服务器会将所有 session 存储在某种 Map 中, session ID 为键,HttpSession 为值。

根据HTTP cookie spec客户端需要在后续请求的 header 中发回相同的 cookie。在后台,服务器将通过 HttpServletRequest#getCookies() 搜索 jsessionid cookie并确定其值(value)。这样,服务器就能够获取关联的 HttpSession 并通过每次调用 HttpServletRequest#getSession() 将其返回。

直截了当:唯一存储在客户端的是 session ID(类似于 cookie)和 HttpSession 对象(包括其所有属性)存储在服务器端(在 Java 的内存中)。您自己无需担心 session 管理,也无需担心安全性。

另见:

关于java - Java session 管理的最佳选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1700390/

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