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

时间:2011-09-20 17:22:18

标签: java jsp session

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

如果会话过期,我正在使用session.invalidate(),以确保删除所有属性,但这不起作用。

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

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

第一次加载此页面时这是有效的,但是如果我再次单击链接再次加载它,则不满足此条件,尽管会话超时。

你能提出任何建议吗?


更新:我的网络工具以下列方式运作:

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

我遇到的问题是,在不活动10分钟后,如果用户点击初始屏幕上的一个文件夹,则不会显示数据库,而是会收到一条消息,说明会话已过期,我被重定向到登录页面,这是理想的。但是,如果我再次点击同一个文件夹,这次我得到了包含数据和所有文件的常用表格。似乎一次点击后,不活动时间不再有效....所以我不知道该怎么办...我正在使用session.invalidate()删除有关会话的所有数据,但是obvioulsy不起作用

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

这是一次更新:

您好,我必须重新考虑这个问题,这对于解决原始问题的90%非常有帮助,但我的网络应用程序仍然有一个....当用户登录时,他们有要单击的选项列表,每次单击都会将它们带到一个新的选项卡,这些选项卡是不同的.jsp文件...如果会话已过期,这些选项卡会显示expired.jsp文件,这是完美的...但是,原始选项卡,用户登录后显示的那个,保持在线状态,我的意思是,它没有表明会话已经过期......在这种情况下我该怎么办?...

1 个答案:

答案 0 :(得分:2)

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

如果您尝试阻止人们在未登录时访问某个页面,您实际上需要在会话中说明他们已经过身份验证,并检查该值。只检查他们请求的会话是否有效是不够的。

相关问题