我编写了一个test.jsp,web.xml和Session listener.对于会话超时我正在使用HttpSessionListener功能.我的会话在1分钟后失效,此时没有用户与会话交互. 使用的技术:JSP,Servlet JSP %@ page import="java.util.
使用的技术:JSP,Servlet
JSP
<%@ page import="java.util.List"%> <%@ page import="java.util.ArrayList"%> <html> <head> <title>Servlet Session Listener example</title> </head> <body> <h2>Add User Screen</h2> <span style="float: right"> <a href="DestroySession.jsp">Destroy this session</a> </span> <form method="post" action="AddUser.jsp"> <h3>Enter Username to Add in List</h3> <input type="text" name="user"/> <input type="submit" value="Add User"/> </form> <% List<String> users = (List<String>)session.getAttribute("users"); for(int i=0; null!=users && i < users.size(); i++) { out.println("<br/>" + users.get(i)); } %> </body> </html>
Java代码
import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public class SessionListener implements HttpSessionListener { private int sessionCount = 0; public void sessionCreated(HttpSessionEvent event) { synchronized (this) { sessionCount++; } System.out.println("Session Created: " + event.getSession().getId()); System.out.println("Total Sessions: " + sessionCount); } public void sessionDestroyed(HttpSessionEvent event) { synchronized (this) { sessionCount--; } System.out.println("Session Destroyed: " + event.getSession().getId()); System.out.println("Total Sessions: " + sessionCount); } }
web.xml中
<?xml version="1.0" encoding="UTF-8"?> <web-app> <display-name>SessionListener</display-name> <distributable/> <listener> <listener-class>SessionListener</listener-class> </listener> <session-config> <session-timeout>1</session-timeout> </session-config> </web-app>
我的要求是:当用户与会话没有1分钟的交互时,我想根据某些数据库值使会话无效.如果数据库值为false,则不应使会话失效.如果数据库值为true,则会话应该无效.但是在1 minuter之后(当用户与会话没有交互时),SessionListener类的sessionDestroyed函数被自动调用,我无法检查数据库值.我怎样才能做到这一点?
你应该试试这个:>将会话添加到自定义管理线程
>在reqular间隔,自定义管理线程应执行以下步骤.
>让自定义管理线程读取DB值>如果在DB中禁用了invalidate session,请让管理线程使用setMaxInactiveInterval增加会话超时值.值-1表示永不失效.>如果在DB中启用了invalidate session,请让管理线程通过在setMaxInactiveInterval中设置较小的值来减少会话超时值.