如果用户关闭浏览器,如何自动结束会话

时间:2013-04-29 06:03:35

标签: java jsp session servlets

我需要在用户处于非活动状态一段时间后自动结束会话,比如10分钟。我们有一个方法

HttpSession session=request.getSession();
session.setAttribute("User", au);
session.setAttribute("name", firstname);
response.sendRedirect("doLogin.jsp");
session.setMaxInterval();

但即使用户有效10分钟,这也将结束会话。如何在用户关闭浏览器时结束会话?

6 个答案:

答案 0 :(得分:13)

避免使用手动代码。

只需web.xml //this will applied for whole application

即可
<session-config>
<session-timeout>10</session-timeout>
</session-config>

检测浏览器关闭事件并调用invalidate方法

if(session!=null) { 
session.invalidate();   
}   

答案 1 :(得分:6)

您可以在ServletContextListener

中将会话时间设置如下
session.setMaxInactiveInterval(15*60); //in seconds

这将为您提供以下优势:您可以从任何外部属性文件/数据库读取会话超时,并在不更改代码的情况下更改会话超时。

您可以使用unload事件并将注销请求发送到服务器。或者继续向服务器发送定期请求,通知用户仍处于活动状态。

答案 2 :(得分:2)

您需要设置会话超时,即当前Session对象失效的时间。

这可以通过在web.xml中设置超时来完成,如:

<session-config>
    <session-timeout>20</session-timeout>
</session-config>

或以编程方式调用Session对象

session.setMaxInactiveInterval(valueInSeconds);

请注意web.xml中设置的会话超时时间以分钟为单位,并以编程方式 - 以秒为单位。

答案 3 :(得分:2)

没有办法让服务器知道用户是否关闭了浏览器。这就是为什么会话具有可配置的时间跨度。如果你想这样做,那么尝试创建一个onclose javascript事件,并从那里做一个ajax调用来接近服务器附近的会话。在服务器中,您可以从此调用中获取会话ID作为参数并将其终止。

我没试过。不要认为这样做是正确的。

答案 4 :(得分:0)

问题:如果用户关闭浏览器,如何自动结束会话?
答案:设置最大非活动时间间隔时间值小于0.

示例:

HttpSession session = request.getSession();
session.setMaxInactiveInterval(-1);
session.setAttribute("User", au);
response.sendRedirect("doLogin.jsp");

答案 5 :(得分:-1)

您可以从网络配置文件中执行此操作。这里有一个样本

 <sessionState 
        mode="InProc" 
        stateConnectionString="tcpip=127.0.0.1:42424" 
        stateNetworkTimeout="10" 
        sqlConnectionString="data source=127.0.0.1;Integrated Security=SSPI" 
        sqlCommandTimeout="30" 
        customProvider="" 
        cookieless="UseCookies" 
        cookieName="ASP.NET_SessionId" 
        timeout="10" 
        allowCustomSqlDatabase="false" 
        regenerateExpiredSessionId="true" 
        partitionResolverType="" 
        useHostingIdentity="true">
        <providers>
         <clear />
        </providers>
   </sessionState>

timeout属性将指定超时时间。