【发布时间】: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...谢谢