Session 当用户单击“上一步”时,如何显示自定义会话过期页面?

Session 当用户单击“上一步”时,如何显示自定义会话过期页面?,session,jakarta-ee,session-state,session-timeout,Session,Jakarta Ee,Session State,Session Timeout,我有一个线性JavaEEWeb应用程序,它要求用户以线性方式跨多个页面输入数据。我在应用程序上设置了超时。(我在超时之前还有一个javascript警报,警告用户,如果他们不想继续,则重定向) 这很好,但我的问题是,如果用户在会话过期后单击后退按钮,他们可以看到数据。我已经在某种程度上解决了这个问题,使用了这个答案: 但是,这不是自定义页面,并且在会话未过期时也会发生 只有在会话已过期(最好没有JS)的情况下,我如何在用户单击返回后向用户显示自定义页面?这里有一个选项,要求您的web应用程序使

我有一个线性JavaEEWeb应用程序,它要求用户以线性方式跨多个页面输入数据。我在应用程序上设置了超时。(我在超时之前还有一个javascript警报,警告用户,如果他们不想继续,则重定向)

这很好,但我的问题是,如果用户在会话过期后单击后退按钮,他们可以看到数据。我已经在某种程度上解决了这个问题,使用了这个答案:

但是,这不是自定义页面,并且在会话未过期时也会发生


只有在会话已过期(最好没有JS)的情况下,我如何在用户单击返回后向用户显示自定义页面?

这里有一个选项,要求您的web应用程序使用在许多web框架(如Spring web Flow)中实现的

在这种情况下,会话到期后的返回单击意味着浏览器发送一个新的
GET
请求,服务器代码通过一个新的
HttpSession
接收该请求。由于向导在第一页启动的会话属性,您可以检测到这种情况:如果
GET
请求不是针对第一页的,并且会话不包含该属性,则表示由于注销或过期超时,会话已丢失。因此,您可以显示一个自定义页面,提醒用户他丢失了工作,并将其引导到向导的第一页

使用POST-REDIRECT-GET模式,如果不发送我提到的新GET请求,浏览器的“后退”按钮就不可能显示具有最新输入的上一个表单

顺便说一下,如果您设计了很多这样的向导,我建议您使用只包含在控制器servlet中的向导,这样您就可以使用任何视图技术

备选方案:由于自定义持久cookie存储了用户在每次提交到服务器后在向导期间提供的所有信息(以清晰或编码的形式),因此可以避免数据丢失。在这种情况下,即使会话属性也是无用的。但由于许多限制,如最大cookie长度、cookie数量或最大HTTP头行,实现起来可能很复杂,因为所有cookie都在一行上发送