tomcat 服务器中 web.xml <!-- ==================== Default Session Configuration ================= --> <!-- You can set the default session timeout (in minutes) for all newly --> <!-- created sessions by modifying the value below. --> <session-config> <session-timeout>30</session-timeout> </session-config>若是其他服务器,类似
web.xml
<!-- ==================== Default Session Configuration ================= -->
<!-- You can set the default session timeout (in minutes) for all newly -->
<!-- created sessions by modifying the value below. --> <session-config>
<session-timeout>30</session-timeout>
</session-config>若是其他服务器,类似
<session-config>
<session-timeout>30</session-timeout>
</session-config>
就OK了,这是tomcat提供的服务,不用你自己刻意去编写代码来实现,也就是说,在用户30分钟内没有在你的网站中做任何动作(没有点击任何连接),那么他的session就会被删除了。至于你说“当用户关闭浏览器时,服务器也及时的删除对应的session”
这个恐怕很难作到,以现在的技术,好象还无法判断用户是否关闭了浏览器
在这里,你将会使用到一个接口 Interface HttpSessionListener
她里面有2个方法:
public void sessionCreated(HttpSessionEvent se)
public void sessionDestroyed(HttpSessionEvent se)
分别会在session被创建和销毁的时候调用到,具体你可以baidu J2EE的API文档
我在网上找了段代码弄上来你给看下是不
package demo.listener;import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;public class SessionCounter implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent event) {
ServletContext ctx = event.getSession( ).getServletContext( );
Integer numSessions = (Integer) ctx.getAttribute("numSessions");
if (numSessions == null) {
numSessions = new Integer(1);
}
else {
int count = numSessions.intValue( );
numSessions = new Integer(count + 1);
}
ctx.setAttribute("numSessions", numSessions);
}
public void sessionDestroyed(HttpSessionEvent event) {
ServletContext ctx = event.getSession( ).getServletContext( );
Integer numSessions = (Integer) ctx.getAttribute("numSessions");
if (numSessions == null) {
numSessions = new Integer(0);
}
else {
int count = numSessions.intValue( );
numSessions = new Integer(count - 1);
}
ctx.setAttribute("numSessions", numSessions);
}
}在这个解决方案中,任何一个Session被创建或者销毁时,都会通知SessionCounter 这个类,当然通知的原因是必须在web.xml文件中做相关的配置工作。如下面的配置代码:<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Struts Examples</display-name><listener>
<listener-class>demo.listener.SessionCounter</listener-class>
</listener>
... rest of web.xml
import javax.servlet.http.HttpSessionListener;public class Test implements HttpSessionListener {
public synchronized void sessionCreated(HttpSessionEvent hse) {
//do nothing
} public synchronized void sessionDestroyed(HttpSessionEvent hse) {
//这里写代码,操作数据库进行删除记录
}
}
然后再在web.xml里配置一下<listener>
<listener-class>
csdn.jinjin0427.Test
</listener-class>
</listener>
问个比较弱智的问题~~
在执行sessionDestroyed方法的时候是不是就不能再通过以前在session中放的ID来删除了??
就是说sessionDestroyed是在session删除后才执行的是么??
同理sessionCreated方法是不是在session创建之前执行的??还是创建之后执行?
先创建session,再调用sessionCreated()方法