一尘不染

会话已过期-如何在浏览器的原始选项卡中终止会话

jsp

我有一个Web应用程序,其中将最长不活动时间设置为10分钟。这只是出于测试目的。基本上,如果会话超时并且我单击链接,则以下窗口浏览器将检查会话是否有效。这也很好。如果发生这种情况,我会收到一条消息,提示“会话已过期,请重新登录”。但是原始窗口保持打开状态,如果我单击相同的链接,那么即使我没有再次登录,这次还是可以看到该页面。为什么是这样?

我正在使用session.invalidate()如果会话已过期,以确保所有属性都被删除,但这无法正常工作。

我在页面开头使用了以下代码部分:

if(request.isRequestedSessionIdValid() == false)
{
     response.sendRedirect("expired.jsp");
     session.invalidate();
     return;
}

这是第一次加载此页面时的工作,但是如果我再次单击链接以再次加载它,即使会话超时,也无法满足此条件。

你能给点建议吗?


更新 :我的webapp通过以下方式工作:

用户进入index.jsp页面并使用ID和密码来访问系统,然后有一个BRMspace.jsp页面,其中有一个文件夹结构供用户访问,具体取决于他们所使用的文档。通过单击每个文件夹,将显示一个已填充数据库的表,供用户下载所需的文档。

我遇到的问题是,闲置10分钟后,如果用户单击初始屏幕上的一个文件夹,则不会显示数据库,而是收到一条消息,指出会话已过期,并且我已重定向到登录页面,这是理想的。但是,如果再次单击同一文件夹,这次将获得包含数据和所有文档的常用表。似乎单击一下后,静止时间不再有效....所以我不确定该怎么做…我正在session.invalidate()删除有关该会话的所有数据,但是obvioulsy无法正常工作。

无论用户单击何处,我都需要在不活动时间之后再次将用户重定向到登录页面。

这是一个更新:

嗨,我必须重新回答这个问题,这对于解决我原来问题的90%很有帮助,但是我的Web应用程序上还剩下一个……,当用户登录时,他们有一个列表。单击的选项,每次单击会将它们带到一个新的选项卡,它们是不同的.jsp文件…如果会话已过期,则这些选项卡将显示expired.jsp文件,这是完美的选择…但是,原始选项卡是一个在用户登录后显示并保持活动状态,我的意思是,这并不表示会话已过期…在这种情况下我该怎么办?


阅读 561

收藏
2020-06-10

共1个答案

一尘不染

网络会话与任何登录或访问凭据无关。这只是意味着容器中保存有为您保存的数据,如果您传入正确的会话令牌(通过cookie或request参数),则可以检索该数据。如果您一段时间(在您的情况下为10分钟)在站点上处于非活动状态,则该数据将被丢弃,并且如果您检查会话的有效性,您将发现该数据仍然存在还是已被丢弃。如果会话已过期,容器将自动创建一个新会话供您处理将来的请求。并且,如果在超时到期之前向服务器发送了另一个请求,则该请求的会话将无效。

如果您试图阻止人们在未登录的情况下访问页面,则实际上需要在会话中输入一些值以表明他们已通过身份验证,然后检查该值。仅检查其请求的会话是否有效是不够的。

2020-06-10