【问题标题】:Session expired - How to terminate the session in the original tab of the browser会话过期 - 如何在浏览器的原始选项卡中终止会话
【发布时间】:2011-09-20 17:22:17
【问题描述】:

我有一个网络应用程序,我已将最长不活动时间设置为 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 文件,这是完美的...但是,原始选项卡,用户登录后显示的那个,保持活动状态,我的意思是,它不显示会话已过期...在这种情况下我该怎么办?...

【问题讨论】:

  • 我使用 Java Server Pages 作为我的语言,我遇到的问题是我已经设法将会话超时和跟踪功能添加到我的 Web 应用程序中,但不幸的是基本上不能正常工作当我登录到我的网络应用程序时,我已经在 web.xml 文件中设置了 10 分钟的超时时间,这是有效的,因为如果我刷新页面,我会在 10 分钟后重定向到登录页面,根据设计...但是,登录后用户可以链接到其他.jsp页面,这意味着,打开其他窗口...如果我点击其中任何一个,会话超时后,我会收到一条消息...
  • ...已过期,我关闭了该选项卡或窗口,但如果我再次单击同一链接,我将被重定向到该页面,因为我没有再次登录。 . 所以简而言之,我的会话超时工作刚刚进行到一半...希望您能提供帮助.. 我上周一直在尝试解决这个问题
  • 我在我的代码中使用以下部分: if(request.isRequestedSessionIdValid() == false) { response.sendRedirect("expired.jsp"); session.invalidate();返回; } 这是正确的,但正如我所说,只有一个,下次我点击链接时,如果会话仍然无效,我不知道为什么这个条件不完整。
  • 请使用您使用的附加信息和一些精简代码更新您的问题。这些 cmets 不适合。
  • 问题已更新 Holger...谢谢

标签: java jsp session


【解决方案1】:

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

如果您试图阻止人们在未登录时访问页面,您实际上需要在会话中添加一些值,表明他们已通过身份验证,并检查该值。仅仅检查他们请求的会话是否有效是不够的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 2014-08-14
    • 2011-02-19
    • 2019-04-27
    相关资源
    最近更新 更多