【发布时间】:2015-12-17 02:15:14
【问题描述】:
如果 cookie 被禁用,我们如何管理会话对象?如何使用 url 编码?
【问题讨论】:
-
阅读这篇文章:使用会话和会话持久性 - docs.oracle.com/cd/E13222_01/wls/docs90/webapp/sessions.html
如果 cookie 被禁用,我们如何管理会话对象?如何使用 url 编码?
【问题讨论】:
servlet 容器将为您处理这个问题。如果您在第一次访问网站时查看 url,它将使用 URL 重写将 JSESSIONID 附加到 URL。
这是因为服务器第一次响应客户端时不知道客户端是否支持 cookie。它还写入了一个带有会话 id 的 cookie,因此在第二个请求中它会检查 cookie,如果存在则停止使用 URL 重写,如果不存在则继续。
【讨论】:
您必须在响应对象中使用 encodeRedirectURL,请参考此博客,它将对您有所帮助。
http://mytechbites.blogspot.com/2009/08/servlet-session-management-when-cookies.html
【讨论】:
它在 URL 末尾添加 jSessionId 以将请求与会话映射,您可能也需要为此配置服务器
【讨论】:
使用HttpServletResponse.encodeURL() 将jsessionid 附加到您的网址,但它被视为harmful。
【讨论】:
HTTP Sessions 是推荐的方法。会话标识在会话期间源自同一浏览器的请求。所有 servlet 可以共享同一个会话。 JSESSIONID 由服务器生成,可以通过 cookie、URL 重写(如果 cookie 关闭)或内置 SSL 机制传递给客户端。应该注意最小化存储在会话中的对象的大小,并且存储在会话中的对象应该是可序列化的。在 Java servlet 中,可以按如下方式获取会话:
HttpSession 会话 = request.getSession(); //返回当前会话或新会话
会话可以超时(在 web.xml 中配置)或手动失效。
【讨论】: