【问题标题】:The http session loses the attribute after request.sendRedirecthttp会话在request.sendRedirect后丢失属性
【发布时间】:2012-11-04 15:34:50
【问题描述】:

内部过滤器我正在尝试为当前的 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);
}

【问题讨论】:

  • 下一个请求中如何获取会话?你会HttpSession objSession = request.getSession(true);吗?
  • 每次通过request.getSession(true)访问会话。

标签: java


【解决方案1】:

您很可能在这期间丢失了第一个会话对象。这可以通过使用

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

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

【讨论】:

  • 我同意不共享会话这一点。我什至尝试将信息存储在 cookie 中。但同样,我在重定向期间丢失了 cookie 信息。请建议在多次重定向期间保留某些信息的任何其他方式(数据库除外)。
  • @Sashikant 你是如何重定向的?
  • response.sendRedirect("some url to another server");
  • @Sashikant:您是否先尝试了基本行为,即request->response->request 正在维护会话?
【解决方案2】:
  1. 检查您的会话到期时间。它可能设置得太低。
  2. 您使用的是可识别 cookie 的客户端(例如 Web 浏览器)还是可能不存储 cookie 的更低级别的客户端?
  3. 当您说“重定向到另一个资源”时,您是指另一个 Web 容器/服务器吗?如果是这样,除非您启用了复制,否则会话将在第二次请求时不可用。

【讨论】:

  • 1.过滤器部署在门户容器内。会话到期时间设置为 60 分钟。 2. 是的,我使用的是最新版本的 Safari,它是一个 cookie 感知客户端。 3. 我正在重定向到另一台服务器进行身份验证。
  • 服务器之间不共享会话。它们甚至不会在同一服务器上的应用程序之间共享。很明显,身份验证服务器对您的初始服务器会话一无所知。为什么会这样?假设您重定向到 google.com。你希望谷歌知道你的会话吗?
  • 我同意不共享会话这一点。我什至尝试将信息存储在 cookie 中。但同样,我在重定向期间丢失了 cookie 信息。请建议在多次重定向期间保留某些信息的任何其他方式(数据库除外)。
【解决方案3】:

我遇到了同样的问题,tore my hair out looking for the best solution。尝试将sessionCookiePath="/" 属性放入您的 context.xml 根节点:

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

这会将会话 cookie 的路径设置为应用的根目录,以便在重定向时传递它。这个简单的修复对我有用,希望它对多年后遇到此问题的其他人也有用。

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。
  • 这并不能真正回答问题。如果您有其他问题,可以点击 进行提问。要在此问题有新答案时收到通知,您可以follow this question。一旦你有足够的reputation,你也可以add a bounty 来引起对这个问题的更多关注。 - From Review
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-03
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
  • 1970-01-01
  • 2016-01-21
相关资源
最近更新 更多