【问题标题】:How to get request object in sessionDestroyed method?如何在 sessionDestroyed 方法中获取请求对象?
【发布时间】:2013-03-18 22:54:29
【问题描述】:

我需要 sessionDestroyed 方法中的 Request 对象,因为我需要在那里检索 Cookie。

public void sessionDestroyed(HttpSessionEvent httpSessionEvent) 
{
// Here I need to get Request object so that I can retrieve Cookies.
}

是否可以获取request 对象以便我可以在那里检索 Cookie?

【问题讨论】:

    标签: session servlets cookies request


    【解决方案1】:

    没有。当会话被销毁时,不一定意味着 HTTP 请求。它可以在超时期间被销毁,因为客户端没有发送任何请求,例如30分钟。 HTTP 请求可用的唯一情况是,当您自己显式调用 HttpSession#invalidate() 时,例如按下注销按钮。但是在您调用该方法的那一刻,您手头已经有一个 HTTP 请求。然后,您可以在同一时刻完成 cookie 工作,而不是在会话侦听器中。

    您不清楚具体的功能要求,您错误地认为这将是正确的解决方案,因此我无法就如何正确解决该问题给出一个非常合适的答案。但其中一种方法是将存储在 cookie 中的信息的副本存储为会话的属性。例如,如果您需要基于每个请求执行此操作,因为 cookie 值可以由 JS 在客户端进行操作,那么您可以为此使用 servlet filter

    【讨论】:

    • 我有 2 个 JSP 表单(form1 和 form2)。这些表单的呈现是根据 Cookie 值决定的。当用户保持空闲(例如)15 分钟时,会话被破坏,其他值被刷新但 Cookie 没有被清除并且无法重定向到正确的表单。相反,它呈现了另一个不正确的形式。因此我想到了在sessionDestroyed 方法中清除cookie。
    • 只需将其设为会话 cookie(将 maxAge 设置为 -1),以便在会话结束时自动销毁。
    【解决方案2】:

    没有。没办法。

    Session Destroy 是可能异步发生的事情,并且超出了请求生命周期的范围。

    在请求生命周期范围之外获取对请求对象的引用是不正确的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-29
      • 2019-03-12
      • 2013-10-03
      • 2014-10-23
      • 2015-05-18
      • 2015-11-24
      • 2017-10-21
      • 2017-11-13
      相关资源
      最近更新 更多