【发布时间】: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