【问题标题】:How to logout automatically after session timeout on server in java web applicationjava web应用程序中的服务器会话超时后如何自动注销
【发布时间】:2014-08-26 01:55:19
【问题描述】:

我有一个小型 Web 应用程序,要求很简单,我的应用程序中有一个 servlet 和几个 JSP 页面。 当我们向 sevrlet 发出请求时,它会在会话超时 1 分钟的服务器上启动会话,然后它会显示一个 JSP 页面。 在服务器上的会话超时后,我想在浏览器中自动显示退出 JSP 页面,我们如何实现这一点。

【问题讨论】:

  • 你可以使用javax.servlet.http.HttpSessionListener

标签: java jsp session servlets


【解决方案1】:

添加到 Jhash

  1. 您必须在应用程序的每个 jsp 上都有一个计时器 javascript 函数(您可以将其保存在 .js 文件中并包含它)
  2. 您在服务器上的会话可能大约是 30 分钟,而您的 javascript 计时器可能是大约 2 到 5 分钟,因为即使显示缓存的 html 页面,它也会在 2 分钟内找出情况
  3. 希望您不要依赖它来保护应用程序。在让用户使用您的应用程序之前,您仍然应该在服务器端检查用户会话是否有效(javascript 应该只是为了方便)

编辑: 在JS中猜测超时然后将用户导航出去的例子:

var lastActiveTimeMs = new Date().getTime(); //This is set to current time on page load
var SESSION_TIMEOUT_MILLIS = 35*60*1000; //35 mins in milliseconds
var CHECK_TIME_MILLIS = 60*1000; //1 mins in milliseconds

setTimeout(fnCheckTimeout, CHECK_TIME_MILLIS); //Check the timeout once in a minute
function fnCheckTimeout(){
  var curMs = new Date().getTime();
  if( (curMs-lastActiveTimeMs)>SESSION_TIMEOUT_MILLIS ){
    window.location.href = 'signout.html';
  }
}

//Keep updating lastActiveTime every time you do an Ajax call. 
//Because server will keep extending the session for every page load or ajax call from client

【讨论】:

  • 每个jsp页面都要开发定时器javascript?
  • 会话在服务器上终止。但是服务器不能自己向客户端发送信息。服务器只有在收到客户端的下一个请求时才能发送响应。因此,如果您希望客户端在会话结束时自动注销,您可以尝试每隔几分钟“轮询”一次会话状态。但是轮询本身可以不断重新激活会话,并且会话永远不会消亡。因此,您必须监控客户端的活动,并等待足够的时间过去,然后导航到登出页面。
  • 你能举个例子解释一下你的回复吗?
  • 添加了一个基本示例。
  • 解释得很好。
【解决方案2】:

为此,您需要在 jsp 页面中使用 javascript。 例如,如果您的会话超时在服务器上为 2 分钟,在 JSP 页面中,您还需要使用 javascript 创建一个具有相同时间的计时器,在发生 javascript 计时器超时后,您只需使用相同的 javascript 代码刷新页面。因此,当您刷新页面时,服务器上已经发生会话超时,因此您可以检查服务器上的会话以及会话是否过期,将控制重定向到您想要的页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多