高分求~~用户列表问题~~

coolmomo 2006-11-16 04:03:04
简单的说,我有个webApp,在用户登陆时,我会将用户的信息(用户名,密码,还有一个连接C服务器的socket)保存在一个列表里.

我原来的想法是,当用户登陆后,加入列表,然后用户注销,就从列表里去掉.
如果用户是非注销(各种关闭IE的方法,包括IE崩溃),用户信息仍然保存在列表里,
最主要是保存那个连接C服务器的socket.

用户如果再次登陆,只要密码正确,我会再次使用那个socket..

.....

现在有个问题,用户非法退出之后,再次登陆的成功,紧接着,另一个用户也是同样的用户名和密码,也要登陆的话,同样可以登陆成功,可是这样会有问题了...两个用户同用一个socket.....但是我无法通过列表来判断,用户是正在使用的,还是非法退出保存在里面的.

有人建议我用cookie,但是如果用的话,这个用户非法退出之后,就只有这台机才可以再次登陆..我不想这样..

有谁有好点的方法??
...全文
411 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
ss19830716 2006-11-20
  • 打赏
  • 举报
回复
我建议后登陆的直接T了前面个登陆的,谁想用直接去修改密码!
coolmomo 2006-11-20
  • 打赏
  • 举报
回复
kjah(黑丁) ( ) 信誉:101 Blog 2006-11-17 15:26:44 得分: 0



前边页面里用js每隔一段时间刷新一个隐藏的页面就行了

=======================================================
按照你的设计,是不是这样的.
1.用户非法退出,保存在列表中.
2.用户A再次登陆后,会有一个页面定时的刷新,是不是要保存每次刷新的当前时间?
3.如果用户B想登陆,会检查当前帐号的刷新时间? 假设用户B登陆时的时间比刷新时间要大于5分钟,那么就表示当前帐号没有人登陆?

不知道我这么想,是不是和你想的一样?
南南北北 2006-11-18
  • 打赏
  • 举报
回复
kjah(黑丁) ( ) 信誉:101 Blog 2006-11-17 15:26:44 得分: 0
前边页面里用js每隔一段时间刷新一个隐藏的页面就行了

=============================================================

不错的办法
yougucao379548695 2006-11-18
  • 打赏
  • 举报
回复
呵呵
coolmomo 2006-11-17
  • 打赏
  • 举报
回复
大家都吃饱了吧..嘿嘿..再帮忙想想..
coolmomo 2006-11-17
  • 打赏
  • 举报
回复
我之所以重新选择一个机制,就是因为以前的机制在IE崩溃的情况下,用户卡里面很长时间..
coolmomo 2006-11-17
  • 打赏
  • 举报
回复
楼上的朋友写的很详细.

用户在登陆到网站之后,会在上面看录像.所以我的session设置的时间非常长,
如果是非法退出,如IE崩溃等现象的话,等session过期那不是一个很漫长的等待?
yahhuop 2006-11-17
  • 打赏
  • 举报
回复
做一个用户登陆的session列表
当用户登陆时,把用户信息和一个session的唯一字存在列表中。当用户退出撤消时,将该session id从列表中读出后删除
南南北北 2006-11-17
  • 打赏
  • 举报
回复
写个详细点的:

1.在列表中保存用户名和sessionID;
2.登陆时:
a.判断用户名,密码,验证码等,通过继续,否则跳转到登陆页,提示XXX;
b.判断用户名是否在列表中:
如不在{登陆成功,将用户名、sessionID、你要存的信息放入列表};
如果在{修改列表中此用户名对应的记录,将sessionID改为新的sessionID};
3.写一个过滤器,过滤除了登陆页请求以外的所有请求,每次有请求到达的时候,先判断列
表中是否有此用户:
如没有{跳转到登陆页};
如果有{判断此用户名对应的sessionID是否与列表中的匹配:
如匹配{响应请求};
如不匹配{跳转到登陆页,提示XXX};
}
4.写一个session监听,当session销毁时,将列表中对应sessionID的记录删除.
5.写一个退出,用户退出,销毁session(非正常退出,只能等到session过期了).
以上完成功能是:当A登陆后,B使用相同帐号登陆,当A再次请求时,将A踢回登陆页面,B正常使用.
不会出现卡住的现象.如果想A登陆后,B不能使用相同帐号登陆,只要登陆时判断列表中是否有此用户名,有则不允许登陆,session销毁时删除此记录,非正常退出,只能等到session过期,可能出现卡住的现象.
coolmomo 2006-11-17
  • 打赏
  • 举报
回复
列表里的socket肯定是一直在连接中的,因为里面有个线程在不停的和C服务器进行握手操做.
保持长连接....
  • 打赏
  • 举报
回复
先按我说的试试去吧,甭搭理session了.
kjah 2006-11-17
  • 打赏
  • 举报
回复
前边页面里用js每隔一段时间刷新一个隐藏的页面就行了
Delphi2C 2006-11-17
  • 打赏
  • 举报
回复
public class SessionListener implements HttpSessionListener {

public void sessionCreated(HttpSessionEvent se) {
System.out.println("session created");
se.getSession().setMaxInactiveInterval(60);
}

public void sessionDestroyed(HttpSessionEvent se) {
HttpSession session = se.getSession();
UserVo user = (UserVo) session.getAttribute(Constant.SESSION_USER);
new OnOffLine().setOffline(user.getUiid().toString());
System.out.println("session destroyed");
}
}
bitan 2006-11-16
  • 打赏
  • 举报
回复
你可以建个线程,定期的把列表里的socket执行一下isConnected()方法
如果还在连接中就不处理,如果已经不在了就执行你的销毁方法就行了。
coolmomo 2006-11-16
  • 打赏
  • 举报
回复
theforever(碧海情天) ( ) 信誉:100 Blog 2006-11-16 17:37:31 得分: 0


你是说,用户来了就添加,退出了就删除,
问题是,如果IE崩溃了..怎么办?
删除的动作永远没有办法做..用户就卡那里卡着了.
----------
你难道不会实时监测用户是否在线吗? 用一个定时器让用户与服务器保持联络.当出于任何原因,不再能与服务器保持联络,服务器就可以认为它已经断线或下线了.

=========================================================
真不会..会还来问吗?
  • 打赏
  • 举报
回复
你是说,用户来了就添加,退出了就删除,
问题是,如果IE崩溃了..怎么办?
删除的动作永远没有办法做..用户就卡那里卡着了.
----------
你难道不会实时监测用户是否在线吗? 用一个定时器让用户与服务器保持联络.当出于任何原因,不再能与服务器保持联络,服务器就可以认为它已经断线或下线了.
  • 打赏
  • 举报
回复
非法退出的一律当作正常退出处理,令其注销就解决了.
coolmomo 2006-11-16
  • 打赏
  • 举报
回复
你是说,用户来了就添加,退出了就删除,
问题是,如果IE崩溃了..怎么办?
删除的动作永远没有办法做..用户就卡那里卡着了.
嘴嘴0605 2006-11-16
  • 打赏
  • 举报
回复
你有没有想过用一个数据表来记录登录的用户呀!这样就可以知道用户的操作了!
coolmomo 2006-11-16
  • 打赏
  • 举报
回复
楼上的朋友,能不能说的详细一点?
加载更多回复(5)

81,117

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧