4

当用户在某个特定时间(例如 10 分钟)不活动时,我需要自动结束会话。我们有一个方法

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

但这将结束会话,即使用户活动了 10 分钟。用户关闭浏览器时如何结束会话?

4

6 回答 6

13

避免为此手动编写代码。

简单地在web.xml //this will applied for whole application

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

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

if(session!=null) { 
session.invalidate();   
}   
于 2013-04-29T06:04:37.877 回答
6

您可以在ServletContextListener中设置会话超时,如下所示:

session.setMaxInactiveInterval(15*60); //in seconds

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

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

于 2013-04-29T06:04:44.073 回答
2

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

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

于 2013-04-29T06:16:45.923 回答
2

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

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

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

或以编程方式调用Session对象

session.setMaxInactiveInterval(valueInSeconds);

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

于 2013-04-29T06:08:20.970 回答
0

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

例子:

HttpSession session = request.getSession();
session.setMaxInactiveInterval(-1);
session.setAttribute("User", au);
response.sendRedirect("doLogin.jsp");
于 2015-07-02T06:07:10.270 回答
-1

您可以从 Web 配置文件中执行此操作。样品在这里

 <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 属性将指定超时时间。

于 2013-04-29T06:10:20.990 回答