JSP重定向:会话丢失问题

时间:2009-05-13 10:44:38

标签: jsp session redirect cookies

<jsp:forward page="URL">替换为response.sendRedirect("URL");后,我发现我知道重定向发生后会丢失会话。有没有办法通过重定向保留会话,或者重新构建会话cookie并将其与重定向一起发送?

我知道我可以通过window.location = "URL";使用JavaScript,但这远非理想!

任何帮助?

2 个答案:

答案 0 :(得分:2)

您不必重新发送cookie,因为如果您建立了会话,则cookie应该已经在客户端(浏览器)上。

你确定你输了吗?你怎么发现这个?您在重定向到的网址所代表的网页中是否有新会话?

浏览器是否接受cookie?否则你应该使用url重写。这是最可能的原因。在将网址传递给HttpServletResponse.encodeRedirectURL之前,您可以尝试使用response.sendRedirect

答案 1 :(得分:2)

当您使用jsp:forward标记时,它会将请求对象转发到标记指示的URL。您实际上正在转发请求对象。

当您使用响应对象的sendRedirect()方法时,您只是将绝对URL发送回客户端的Web浏览器。换句话说,响应变为重定向到给定URL,然后客户端的浏览器会调用它。

如果数据是请求的一部分,则会丢失;因此,如果您在设置会话的用户名属性之前尝试重定向,则会发生这种情况。

如果您真的失去了会话,这可能表明以下几点: 1)如果新URL不在同一个域中,则不会发送cookie。 2)如果新URL位于cookie路径之外,则不会发送cookie。 3)浏览器未设置为允许cookie。对于这种情况,当您使用jsp:forward时,您将不得不对URL进行编码,因此如果是这种情况我会感到惊讶。

在任何这些情况下,都会建立一个新会话,并使用新域和URL的路径创建一个新的cookie。