【问题标题】:HttpSession expires on page refreshHttpSession 在页面刷新时过期
【发布时间】:2012-10-12 16:15:44
【问题描述】:

我是 JSF 的新手,我正在做一些关于 Scopes 和 Http 会话生命周期的研究,但我不清楚一件事。

我知道使用 ExternalContext 中的 sessionMap 存储变量是可能的,而且它过去可以很好地满足我的需要。我也知道,当会话失效时,地图上存储的所有数据都会丢失。

但是,我不知道的是:当页面刷新时会话失效了?

当我不得不在我的 Web 应用程序中的一个按钮上发出下载请求时,我的问题出现了。显然无法通过 Ajax 发出下载请求,因此必须刷新整个页面。下载正常进行,但在那之后,地图上存储的所有数据都消失了,包括所有托管的 bean。用户数据本身并不重要,因为我可以存储它,然后将其再次放在新的会话映射中。但是托管 bean 呢?我应该如何进行?

【问题讨论】:

  • 刷新页面时会话无效 - 这不是正常行为。请跟踪 HTTP 流量并判断是浏览器忘记发送会话 cookie,还是服务器返回了新的会话 cookie。这样我们就可以确定谁有错:客户端或服务器。
  • @BalusC 首先,感谢您的回答。好吧,我不完全确定会话是否无效,但如果我的 sessionMap 丢失并创建了一个新会话,我想我可以确认,对吧?关于你的建议,介意给我一个关于我会怎么做的提示吗?我的意思是,跟踪 cookie 和所有内容?
  • 在 Chrome/IE9/Firebug 中按 F12 并检查 Network 选项卡。要了解基本会话概念的工作原理,请访问此答案 stackoverflow.com/a/3106909
  • 好的,我会尝试,然后在这里发布我发现的内容。感谢您的帮助。
  • 请注意服务器响应中的Set-Cookie标头和对服务器的请求中的Cookie标头。这里发生了什么?下载后服务器是否发送了一个新的 Set-Cookie 标头,指示浏览器使 cookie 过期?

标签: jsf scope managed-bean httpsession


【解决方案1】:

假设不是浏览器行为不端,只有当服务器端代码实际上通过调用ExternalContext#invalidateSession()HttpSession#invalidate() 使会话无效时才会发生这种情况。

如果您似乎无法确定它,则创建一个HttpSessionListener 并在sessionDestroyed() 方法上放置一个调试断点,并调查启动它的调用堆栈以及原因。

【讨论】:

    猜你喜欢
    • 2011-07-09
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 2021-05-01
    • 2018-02-04
    • 2017-07-10
    • 1970-01-01
    相关资源
    最近更新 更多