我需要在用户处于非活动状态一段时间后自动结束会话,比如10分钟。我们有一个方法
HttpSession session=request.getSession();
session.setAttribute("User", au);
session.setAttribute("name", firstname);
response.sendRedirect("doLogin.jsp");
session.setMaxInterval();
但即使用户有效10分钟,这也将结束会话。如何在用户关闭浏览器时结束会话?
答案 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)
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属性将指定超时时间。