【问题标题】:JSP Redirect: Session Loss IssuesJSP 重定向:会话丢失问题
【发布时间】:2011-03-29 06:20:17
【问题描述】:

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

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

有什么帮助吗?

【问题讨论】:

    标签: jsp session redirect cookies


    【解决方案1】:

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

    您确定会丢失会话吗?你如何检测到这一点?您重定向到的 url 所代表的页面中是否有新会话?

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

    【讨论】:

    • 在我共享的页面之间,作为会话属性,用户名。当我简单地转发页面时,它会正常显示,但是当我重定向时,我得到“null”作为名称......但是,使用购物车有效,所以我知道建立了一个新会话;我会试试你的建议,看看我的问题是否解决了!
    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-31
      • 2013-06-19
      相关资源
      最近更新 更多