有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

jsp在javaweb应用程序中如何在服务器会话超时后自动注销

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


共 (2) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

    添加到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