Jsf HttpSession在页面刷新时过期

Jsf HttpSession在页面刷新时过期,jsf,scope,managed-bean,httpsession,Jsf,Scope,Managed Bean,Httpsession,我是JSF新手,我对作用域和Http会话生命周期做了一些研究,但有一件事我并不清楚 我知道使用sessionMap从ExternalContext存储变量是可能的,并且它过去可以很好地满足我的需要。我还知道,当会话无效时,地图上存储的所有数据都将丢失 然而,我不知道的是:当页面刷新时,会话无效 当我不得不在web应用程序的一个按钮上输入下载请求时,出现了我的问题。显然,下载请求不能通过Ajax进行,因此必须刷新整个页面。下载正常进行,但之后,地图上存储的所有数据都消失了,包括所有托管bean。用

我是JSF新手,我对作用域和Http会话生命周期做了一些研究,但有一件事我并不清楚

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

然而,我不知道的是:当页面刷新时,会话无效


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

假设不是webbrowser犯了错误,只有当服务器端代码通过调用
ExternalContext#invalidateSession()
HttpSession#invalidate()
使会话失效时,才会发生这种情况


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

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