锁定老帖子 主题:限制多窗口重复登陆
精华帖 (9) :: 良好帖 (2) :: 新手帖 (11) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-26
URL REWRITE
|
|
返回顶楼 | |
发表时间:2009-12-26
自己写一个单例程序
里面拿着所有的session的引用,当session销毁里也把引用删除掉。当新的用户登录里,就用session里面存储的username(在表里是唯一的那个)来比较是否用户已经登录了。 |
|
返回顶楼 | |
发表时间:2009-12-26
spring security里也有一个防止重复登录的过滤器,楼主可以参考一下,实现方法去上面所说的大概相同
|
|
返回顶楼 | |
发表时间:2009-12-26
最后修改:2009-12-26
凤舞凰扬 写道 引用 好像服务器就是根据session id来判断是否是同一个用户的,如果是一有的seesion id,则会将请求分流到之前处理这个请求的节点上。现在的问题是session id在每次IE关掉之后在客户端都没有了,服务器没办法进行识别。
不知道我的理解是否正确 我们常说的session id是服务器判断与之相连接的客户端的会话,实质上,和我们另外一个角度理解的用户是有区别的。你说的没错,如果已经存在session,就转发。不过后面一句就陷进去了。其实我前面说过,你需要传递另外一个东西,jsessionId,你在很多网站都可以看到这种应用(尤其是IBM的),对于转发服务器来说,是否存在http session并不重要,没有创建一个就是。你session中存储的数据并不在其中,而是在你对应的JVM节点中,而它是可以通过jsessionId这样的方式去获取的。 至于说怎么识别这样的东西,其实所有的支持负载均衡多个JVM节点并存的服务器都支持。或者大不了如楼上所说,自己建立中央缓存,自己在程序中识别这样的request参数。 大概明白您的意思了。即把session id存放在JVM SESSION中而非HTTP SESSION中,跟之前那位兄弟提到的memcache方案基本相似。但关键是,这个seesion id在第一次被HttpSession返回来后,如果想在下次发起请求是将其原样送给服务器,就必须有一个机制在客户端能让其存活下来,而以浏览器为单位的session cookie是做不到的。 也就是说,问题的关键不是服务器端没办法识别jsessionid,而是这个jsessionid在客户端没法持久化。除非...我能通过在客户端JS上自己动手伪造一个跟登录客户ID相关的jsessionid出来 case0079 写道 URL REWRITE
URL REWRITE前提是服务器端给返回一个JSESSIONID,但如果客户端给过去的jsessionid每次都不同,如何指望返回来的东东的正确性呢。 同上,棘手的不是server side,而是client side GeassLei 写道 spring security里也有一个防止重复登录的过滤器,楼主可以参考一下,实现方法去上面所说的大概相同
这个之前有兄弟提到过,正在研究中,谢谢提醒 |
|
返回顶楼 | |
发表时间:2009-12-27
将业务bizID合并为一个参数存到cookie中.
如:biz.username=bizID; 然后页面提交的时候找到当前username对应的bizID,将其传回来. 服务端建立userName和bizID以及IP的对应关系. |
|
返回顶楼 | |
发表时间:2009-12-27
请参见这个老帖子:
http://www.javayou.com/diary/8534 |
|
返回顶楼 | |
发表时间:2009-12-27
最后还是来总结一下吧,就是自造JESSIONID和memcache结合来搞定
|
|
返回顶楼 | |
发表时间:2009-12-27
参见 http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/HttpSessionBindingListener.html
javax.servlet.http.HttpSessionBindingListener valueBound(HttpSessionBindingEvent event); valueUnbound(HttpSessionBindingEvent event); 借助Session监听可以完成你要的功能。 |
|
返回顶楼 | |
发表时间:2009-12-28
浏览器的关闭时间应该可以捕获吧,我在校内网上写日志的时候传了照片,在日志没写完的时候我不想写了,就关了浏览器,这时竟然弹出一个对话框问我是否放弃本次日志,点击确定后提交了表单才关闭的。
|
|
返回顶楼 | |
发表时间:2009-12-28
感觉楼主被JSESSIONID给绕进去了,其实就像前面兄弟说的在数据库增加上次登录时间一个字段完全可以解决问题
另外楼主用了SSO,在SSO server端也可以解决问题,当然如果sso server也是多机配置的话同样要注意session 共享的问题 个人认为用数据库是最简单的解决方案 |
|
返回顶楼 | |