Java中会话管理的最佳选择

Sac*_*iya 51 java cookies session servlets url-rewriting

在Java中管理会话的最佳方式.我听说cookie不是可靠的选项,因为它们存储在浏览器中,以后可以访问?它是否正确?如果可能的话,请用编码示例提出答案.

哪个是最好的:

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

Bal*_*usC 69

会话管理(客户端标识,cookie处理,保存会话范围数据等)基本上已由appserver本身完成.您根本不需要担心它.您可以通过HttpSession#setAttribute()和在会话中设置/获取Java对象#getAttribute().您真正需要处理的唯一事情是客户端不支持cookie的情况下的URL重写.然后它会jsessionid在URL中附加一个标识符.在JSP中,您可以使用JSTL c:url.在Servlet中,您可以使用HttpServletResponse#encodeURL()它.这样,服务器可以通过读取新请求URL来识别客户端.

您的新问题可能是"但是,如何与此相关?服务器如何做到这一切?".嗯,答案是这样的:如果服务器收到来自客户端的请求,并且服务器端代码(您的代码)正在尝试获取HttpSession,HttpServletRequest#getSession()而尚未创建任何人(在新会话中的第一个请求),则服务器将创建一个新的本身.服务器将生成一个冗长,唯一且难以猜测的ID(您可以获取的HttpSession#getId()ID)并将此ID设置为带有名称的cookie的值jsessionid.服务器使用的引擎盖HttpServletResponse#addCookie().最后,服务器将以Map会话ID作为键和HttpSessionas值存储某种类型的会话.

根据HTTP cookie规范,客户端需要在后续请求的标头中发回相同的cookie.在引擎盖下,服务器将搜索jsessionidcookie HttpServletRequest#getCookies()并确定其值.这样,服务器就能够获得相关联,HttpSession并在每次调用时将其返回HttpServletRequest#getSession().

至关重要:存储在客户端的唯一内容是会话ID(在cookie的风格中),并且HttpSession对象(包括其所有属性)存储在服务器端(在Java的内存中).您无需担心自己的会话管理,也无需担心安全问题.

也可以看看:

  • 更新:当前的**HTTP状态管理机制**规范是[**RFC 6265**](http://tools.ietf.org/html/rfc6265),它废弃了以前的规范[RFC 2965](http: //tools.ietf.org/html/rfc2965).您可以更新答案中指向RFC 2965的链接(在"HTTP cookie规范"中). (4认同)

Aar*_*lla 6

所有Java Web框架都支持cookie或URL编码的会话ID.他们会自动选择正确的方法,因此您无需做任何事情.只需从容器中请求会话对象,它就会处理细节.

[编辑]有两种选择:Cookie和特殊网址.两种方法都存在问题.例如,如果您在URL中对会话进行编码,则人们可以尝试传递会话(例如,通过将URL放入邮件中).如果您想了解这一点,请阅读一些有关安全性和构建应用服务器的文章.否则:您的Java应用服务器将为您做正确的事情.不要考虑它.


归档时间:

查看次数:

58967 次

最近记录:

9 年,9 月 前