3

在过滤器内部,我试图为当前的 http 会话设置一个属性。然后我使用 response.sendRedirect() 重定向到另一个资源。资源将请求发送回过滤器。第二次会话丢失会话属性。

请提供一些指针。

第一个请求如下:

HttpSession objSession = request.getSession(true);
objSession.setAttribute("wasRequestURL", completeURL);

第二个请求如下:

if (null != objSession.getAttribute("wasRequestURL") && 
    !"".equals(objSession.getAttribute("wasRequestURL").toString().trim())) {

    requestedURL = objSession.getAttribute("wasRequestURL").toString();

    logger.info("The session value for wasRequestURL is :::"+requestedURL);
}
4

3 回答 3

0
  1. 检查您的会话到期时间。它可能设置得太低。
  2. 您是在使用像 Web 浏览器这样的 cookie 感知客户端,还是可能不存储 cookie 的更低级别的客户端?
  3. 当您说“重定向到另一个资源”时,您是指另一个 Web 容器/服务器吗?如果是这样,除非您启用了复制,否则第二次请求时会话将不可用。
于 2012-11-15T23:06:15.373 回答
0

您很可能在两者之间丢失了第一个会话对象。这可以通过使用来验证

HttpSession objSession=request.getSession(false);//don't create session when absent

在您的第二个请求中。我几乎可以肯定,由于您的第一个会话丢失,它将返回 null。如果是这样,请调查您围绕会话创建的机制/配置。

于 2012-11-15T23:02:28.970 回答
0

I had the same issue and tore my hair out looking for the best solution. Try putting sessionCookiePath="/" attribute into your context.xml root node:

<Context ... sessionCookiePath="/" > ... </Context>

This will set the path of your session cookie to the root of your app so that it will be passed on redirect. This simple fix worked for me, hope it works for anyone else having this issue years later.

于 2021-12-15T00:22:15.267 回答