web.xml设置
<session-config>
<session-timeout>15</session-timeout>
</session-config>
今天有一个用户说昨天突然断电,今天早上登录不了系统,我很奇怪为什么session没有失效。
白天一般有100多人同时在线,不能重启weblogic服务,有其他方法干掉该用户session吗?
<session-config>
<session-timeout>15</session-timeout>
</session-config>
今天有一个用户说昨天突然断电,今天早上登录不了系统,我很奇怪为什么session没有失效。
白天一般有100多人同时在线,不能重启weblogic服务,有其他方法干掉该用户session吗?
解决方案 »
- 发现一个免费的JSP空间
- session前后不是一个,怎么解决。
- Help! spring + hibernate 级联删除问题。
- 如何解决这个错误::java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]无效的描述符索引
- tomcat5.5虚拟目录配置问题!
- xiss_高分请教
- 推荐JSP好的书籍和网址
- 有关标记库中中文属性的问题
- 本人想学jsp,想问几个关键的问题
- appache和tomcat怎样联起来呀.我是win98请大侠们再仔细说一次.
- mysql中的mediumtext格式在hibernate中怎么映射
- 火狐浏览器和IE浏览器不兼容怎么办啊?
然后kill掉,你试试看好用不
这个情况只出现过一次,那次是用户登录系统后,他那边突然停电造成的
<session-timeout>15</session-timeout>
</session-config> 我靠,不是把,看看有没有异常信息。或者提示。 15分钟,你都7个小时
list看看这个对象是如何存储的,可能没清除,你应该用线程去处理下userid,当多长时间,该userid没有再用就立即清除。
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;public class OnlineUserBindingListener implements HttpSessionBindingListener {
String username;
public OnlineUserBindingListener(){
}
public OnlineUserBindingListener(String username){
this.username=username;
}
public void valueBound(HttpSessionBindingEvent event) {
HttpSession session = event.getSession();
ServletContext application = session.getServletContext();
// 把用户名放入在线列表
List onlineUserList = (List) application.getAttribute("onlineUserList");
// 第一次使用前,需要初始化
if (onlineUserList == null) {
onlineUserList = new ArrayList();
}
onlineUserList.add(this.username);
application.setAttribute("onlineUserList", onlineUserList);
} public void valueUnbound(HttpSessionBindingEvent event) {
HttpSession session = event.getSession();
ServletContext application = session.getServletContext(); // 从在线列表中删除用户名
List onlineUserList = (List) application.getAttribute("onlineUserList");
onlineUserList.remove(this.username);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
System.out.println(this.username + "退出系统。");
System.out.println("退出时间"+sdf.format(new Date()));
}
}
测试的时候,我关闭网页15分钟后还是可以登录的,上面是我的sessionlistener。出现这个状况是特例,大多数还是能清除的
public void valueBound(HttpSessionBindingEvent event) {
HttpSession session = event.getSession();
ServletContext application = session.getServletContext();
// 把用户名放入在线列表
List onlineUserList = (List) application.getAttribute("onlineUserList");
// 第一次使用前,需要初始化
if (onlineUserList == null) {
onlineUserList = new ArrayList();
}
onlineUserList.add(this.username);
application.setAttribute("onlineUserList", onlineUserList);
}看不出什么问题,只有一个建议,在 onlineUserList.add(this.username); 之前,应该检查一下username是否已经存在,(onlineUserList.contains(this.username)),判定不存在再调用onlineUserList.add(this.username);
HttpSession session = request.getSession();
ServletContext application = session.getServletContext();
// 把用户名放入在线列表
List onlineUserList = (List) application.getAttribute("onlineUserList");
//从onlineUserList里移除该用户的用户名
onlineUserList.remove("username");
通过访问此jsp,使代码运行
只能靠sessionlistener来判断
ServletContext application = session.getServletContext();
// 把用户名放入在线列表
List onlineUserList = (List) application.getAttribute("onlineUserList");这个application不是只在sessionlistenner里才能拿到的啊,在jsp里一样可以拿到并且进行操作啊。这样不就可以检查用户的userid是否存在了?