Sac*_*iya 51 java cookies session servlets url-rewriting
在Java中管理会话的最佳方式.我听说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作为键和HttpSession
as值存储某种类型的会话.
根据HTTP cookie规范,客户端需要在后续请求的标头中发回相同的cookie.在引擎盖下,服务器将搜索jsessionid
cookie HttpServletRequest#getCookies()
并确定其值.这样,服务器就能够获得相关联,HttpSession
并在每次调用时将其返回HttpServletRequest#getSession()
.
至关重要:存储在客户端的唯一内容是会话ID(在cookie的风格中),并且HttpSession
对象(包括其所有属性)存储在服务器端(在Java的内存中).您无需担心自己的会话管理,也无需担心安全问题.
所有Java Web框架都支持cookie或URL编码的会话ID.他们会自动选择正确的方法,因此您无需做任何事情.只需从容器中请求会话对象,它就会处理细节.
[编辑]有两种选择:Cookie和特殊网址.两种方法都存在问题.例如,如果您在URL中对会话进行编码,则人们可以尝试传递会话(例如,通过将URL放入邮件中).如果您想了解这一点,请阅读一些有关安全性和构建应用服务器的文章.否则:您的Java应用服务器将为您做正确的事情.不要考虑它.
归档时间: |
|
查看次数: |
58967 次 |
最近记录: |