1.web容器设置(以tomcat为例)
在tomcat\conf\web.xml中设置,tomcat默认session超时时间为30分钟,可以根据需要修改,负数或0为不限制session失效时间。
<session-config>
<session-timeout>30</session-timeout>
</session-config>
2.在工程的web.xml中设置
<!-- 时间单位为分钟 -->
<session-config>
<session-timeout>15</session-timeout>
</session-config>
3.通过java代码设置
public void setMaxInactiveInterval(int interval);//时间单位为秒
三种方式的优先级为1<2<3
session 在tomcat重启后一般也不会失效,关闭浏览器后,session失效 。
在一般系统中,也可能需要在session失效后做一些操作:
(1)控制用户数,当session失效后,系统的在线用户数减少一个,控制用户数在一定范围内,确保系统的性能。
(2)session失效,把用户对象移除,提示用户重新登录
那么如何在session失效后,进行一系列的操作呢?
这里就需要用到监听器了,即当session因为各种原因失效后,监听器就可以监听到,然后执行监听器中定义好的程序就可以了。
监听器类为:HttpSessionListener类,有sessionCreated和sessionDestroyed两个方法 ,自己可以继承这个类,然后分别实现。
sessionCreated指在session创建时执行的方法
sessionDestroyed指在session失效时执行的方法
以下以session失效移除用户对象为例:
session监听SessionListener 类
import com.csii.pe.accesscontrol.ResourceList;
import com.csii.pe.core.User;
import java.util.Enumeration;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.context.WebApplicationContext;
public class SessionListener implements HttpSessionListener {
private ResourceList resourceList = null;
protected Log log = LogFactory.getLog(super.getClass());
public void sessionCreated(HttpSessionEvent arg0) {
}
public void sessionDestroyed(HttpSessionEvent arg0) {
try {
HttpSession session = arg0.getSession();
User user = (User) session.getAttribute("_USER");
if (this.resourceList == null) {
init(session);
}
if ((user != null) && (!(user.isLogout())))
this.resourceList.remove(user.getUniqueId());
} catch (Exception e) {
this.log.error("_remove user", e);
}
}
public void init(HttpSession session) {
Enumeration en = session.getServletContext().getAttributeNames();
while (en.hasMoreElements()) {
String attribName = (String) en.nextElement();
Object attrib = session.getServletContext().getAttribute(attribName);
if (attrib instanceof WebApplicationContext) {
WebApplicationContext wb = (WebApplicationContext) attrib;
this.resourceList = ((ResourceList) wb.getBean("successUserRegistry"));
}
}
}
}
监听器在web.xml中声明
<listener>
<listener-class>com.test.SessionListener</listener-class>
</listener>