关于监听的一个小问题!你懂不?进来看看。。。 对于用户登录,我想做像做到不能重复登录,网上说放在session中,那两台机器呢?还有的说放在application中,那访问的人数达到一定的数量呢?岂不悲剧了!嗯,我想在数据库里弄一个字段,online,0代表下线,1代表上线,但如果用户没有按照流程正常退出,而是直接关掉浏览器或是断电、死机等意外发生,怎么实现一个监听对其数据库中的数据进行更改。 望各位大神各点实际的提示!由衷感谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 对于用户登录,我想做像做到不能重复登录,网上说放在session中,那两台机器呢?用session好,对于单纯的用户登录,不可能用到application.对于你所说的两台机器,每个用户的session都不同,所以不用担心,如果相同,可以向qq那样的实现操作一样了 如果一定要获得登录退出状态,就需要除了登录退出来确认在线下线外,还得有一个 在线确认+超时认定下线 机制如果没有在线确认(比如心跳消息等),就无法确认是否没有主动退出,结合了超时认定下线就可以完善退出机制。具体的可以查一下:2、session何时被删除 综合前面的讨论,session在下列情况下被删除a.程序调用HttpSession.invalidate();或b.距离上一次收到客户端发送的session id时间间隔超过了session的超时设置;或c.服务器进程被停止(非持久session)http://beyond99.blog.51cto.com/1469451/543282 可能一楼没有听明白我的意思,我是想让一个用户不能多次登录,只能登录一次,如果不下线另一台机器上是不能登录同一个账号的,session不能跨机器。 用数据库中的 0,1来区分也可以。。但不是简单的按照退出来区分是否退出 。。应该每个客户端登陆成功后就要和服务器端连接一个TCP长连接。每隔1分钟都要发送一个通道保持信号 如果3分钟内服务器端没有收到相应客户端发送的通道保持信号 服务器端就认为该用户已经推出 这个时候服务器端自动修改该用户的数据库状态。。 map ConcurrentHashMap<userId,userSession> if(map.get("xxx")!=null) 不能登陆 else map.put("xxx",userSession) 存在数据库比application更杯具。用户的每一次访问你都要去数据库查询并验证?比较好的做法是存在application或是static一个map。一般是后登陆的踢掉先登陆的。因为你根据无法准确地知道客户端什么时候下线了(比如死机、或断电)。不过用长连接可以解决这个问题,但从技术上来说要麻烦一些。 session覆盖就可以了,map存个用户名和session ID sessionID 是唯一的,那样覆盖别人session别人就自动被T了,不要什么监听的。你设置online的话如果IE非正常关闭的话数据永远不会变0或1的话用户怎么上线了? 非正常关闭session会失效的,可以以此来更新数据! http://dtfy56924.iteye.com/blog/545355单点登录sso 这个等待时间多长?你设置session多长?一分种?那我操作时稍微延迟一点就自动退出了,十分钟?那我非正常退出是不是要等十分钟才能再次登陆?所以还是用踢的方式比较好,QQ也是用的踢的方式嘛。 struts2 result返回问题 struts2里面action类里面怎么获取request!!! 下载的问题 如何统计今日访问量??? 代码从asp转到jsp,遇到一些问题请教,多谢!! 求教Tomcat配置数据源的问题,在线恭候! ExtJS的饼状图能不能在扇形图上写字? 在线等!!!swf中的超链接路径找不到 sql语句统计年级分数怎么做。 HTTPClientUtil工具类出现问题 jsp页面from的post数据,怎么递交给另一个JSP页面接收。 请打大家帮我看一下struts2 action 跳转问题。提示:404 谢谢 !
用session好,对于单纯的用户登录,不可能用到application.对于你所说的两台机器,每个用户的session都不同,所以不用担心,如果相同,可以向qq那样的实现操作一样了
2、session何时被删除
综合前面的讨论,session在下列情况下被删除a.程序调用HttpSession.invalidate();或b.距离上一次收到客户端发送的session id时间间隔超过了session的超时设置;或c.服务器进程被停止(非持久session)http://beyond99.blog.51cto.com/1469451/543282
if(map.get("xxx")!=null)
不能登陆
else
map.put("xxx",userSession)
用户的每一次访问你都要去数据库查询并验证?
比较好的做法是存在application或是static一个map。
一般是后登陆的踢掉先登陆的。因为你根据无法准确地知道客户端什么时候下线了(比如死机、或断电)。不过用长连接可以解决这个问题,但从技术上来说要麻烦一些。
这个等待时间多长?你设置session多长?一分种?那我操作时稍微延迟一点就自动退出了,十分钟?那我非正常退出是不是要等十分钟才能再次登陆?所以还是用踢的方式比较好,QQ也是用的踢的方式嘛。