作一格隐藏帧, 在里面每隔一短时间,比如5秒钟,刷新一下相当于重新执行一下。。看sessionID 与 userID 相比配的时候存在,不存在就把userID删除。
解决方案 »
- jsp生成excel的问题
- 为什么下载的SSH API都是教程那样的啊
- 求救高手-----jsp中select问题
- turbine问题:请问在screen下面增加了一个HelloWorld.vm文件,我应该访问什么地址才能够看到HelloWorld.vm的内容?
- javascript使用的问题
- 一个简单的RMI程序,调试N遍了,总是不成功,寻求帮助!!
- ServletContext乱码问题
- 急急请帮忙!!!
- 还是关于applet和servlet通信的问题!高手看过来!
- 在JSP如何判断str1是否在str2中?是否有相应的函数?
- 菜鸟提问:如何取得float和double中小数点后我想要的的位数
- 怎样将STRING类型的数据存入数据库中数据类型为CHAR的字段中
回2楼的:什么是Hashtable啊??汗
如果不正常退出的话,那么最后离开时间在最后登陆时间之前。然后确定一个时间差,如20分钟,就像Session一样,并根据这个用户名的最后登陆时间和最后离开时间来决定是否已经登陆
里面有个static的vector
用户登陆的时候就往里面加一个。session失效的时候就减一个
如果登陆时候,发现重复的session就不让他登陆。
* 当用户创建一个会话时,将用户该对象实力放入到再现用户列表中
* @param event
*/
public void valueBound(HttpSessionBindingEvent event) {
boolean dup = false;
for (int i = 0; i < UserSession.userList.size(); i++) {
UserSession u = (UserSession) UserSession.userList.get(i);
if (u != null
&& u.getUserName() != null
&& u.getUserId().equals(
this.getUserId())) { // forbid add a duplicate user
dup = true;
}
}
if (!dup) {
UserSession.userList.add(this);
}
System.out.println(this.userId + " added into userlist");
} /**
* 当用户会话失效时,在再现用户表中将该对象实力删除
* @param event
*/
public void valueUnbound(HttpSessionBindingEvent event) {
UserSession.userList.remove(this);
System.out.println(this.userId + " remove from userlist");
}
如果存在则销毁该session。重新建立该用户的session。把该session对象放入hashmap中。
如果不存在,建立用户的session,把该session放入hashmap中。
如果超时了,从hashmap删除该用户session对象。这样做的后果是:如果有相同用户同时登陆,则强行销毁先登陆用户的session,用后登陆的用户登陆。(类型qq和msn的用户同时登陆机制)
表明用户的状态,在线就设为1,其余为0,在用户退出的时候把它置为0
登陆的时候置为1
这样关键就是防止用户直接点击关闭按钮,这个可以在页面的body里 onunload=“javascript:window.open("logout.jsp","","fullscreen=0,toolbar=1,scrollbars=1,menubar=1,location=0,width=10,height=10,top=0,left=0")”
在logout.jsp页面里注销session和更换数据库该用户的状态
你觉得这样做怎么样?
有这一建议
在用户表后加一字段,f_refresh datetime,f_sessionid
然后,在使用的页面上加一个iframe(子帧),如果是框架型的就在一个不变的框架上加,如果不是的话就在每个页面上加个包含页面
这个子帧每隔五秒刷新,更新f_refresh字段为当前日期、时间值
然后在登录页面加一个判断
如果系统当前时间与f_refresh 差别小于十秒或者f_sessionid不同,那么就不可以登陆