【发布时间】:2010-12-20 05:46:38
【问题描述】:
我想知道如果客户端浏览器禁用了 cookie 功能,我该如何管理会话..
如果我想用简单的 JSP - Servlet 来实现它,那我该怎么做呢?
提前谢谢...
【问题讨论】:
我想知道如果客户端浏览器禁用了 cookie 功能,我该如何管理会话..
如果我想用简单的 JSP - Servlet 来实现它,那我该怎么做呢?
提前谢谢...
【问题讨论】:
在JSP端,你可以使用JSTL的<c:url>。
<a href="<c:url value="page.jsp" />">link</a>
就这么简单。当 cookie 被禁用时,它会自动附加 jsessionid。
在 Servlet 方面,您需要 HttpServletResponse#encodeURL() 或 - 通常是 Servlets 中首选的 - HttpServletResponse#encodeRedirectURL()。
response.sendRedirect(response.encodeRedirectURL("page.jsp"));
【讨论】:
每个网址都必须使用response.encodeURL("page.jsp")进行编码
这会将会话 ID 添加到每个 URL 的末尾,因此不必启用 cookie。
请注意,您必须为每个 URL 手动执行此操作才能使其正常工作。
请参阅this link 了解更多信息。
【讨论】:
没有 cookie,您有两种选择。第一个是通过 Urls 传递 sessionId。这需要在服务器上进行大量工作,因为您发回的每个 url 都必须附加一个 sessionId(通常以查询字符串参数的形式)。例如:
/路径/到/页面
变成
/path/to/page?sessionid=ASDFG-ASDFG-ASDFG-ASDFG-ASDFG
您的另一个选择是将通过 http 获得的信息组合到“唯一”密钥中并创建您自己的会话存储桶。通过结合 Http UserAgent、RemoteIp 和 RemoteXfip,您可以接近唯一地标识用户,但不能保证此密钥是 100% 唯一的。
【讨论】: