我要做的功能就是跟QQ的功能类似的,不过是基于B/S的,当用户在同一台电脑,同一时段登录,同一用户在同一台电脑或者另外一个地点登录,系统会提示改用户已经登录,如果在同一电脑上直接提示不能重复登录,如果在另一地点登录要把先前的用户挤掉。请问这个功能怎么实现,最好能有源码(servlet或者struts)?
我查了一些资料,看了跨域的单点登录(SSO),但是很模糊,请给提供一些资源。
我查了一些资料,看了跨域的单点登录(SSO),但是很模糊,请给提供一些资源。
每个用户过来之后,如果是新登录,则覆盖map里面的值,否则的话比对一下当前会话的sessionid和map里面的sessionid是否一致,不一致踢出去就可以了(把session销毁)这些判断都是用filter来处理就可以。代码就不给你贴了
但是你说要跨服务器, 那就要用临时数据库表之类的了.
还有写一个job, 定时更新当前在线人的状态.
比如每1分钟查一下表,把超时的查出来,改状态或者删除等操作.
这样会不会好些?
当然你要跨服务器那得用一个数据库会好做一些.
以上是排除性能上的问题.
如IP不同,登录状态为登录,则同1楼。。就不重复了。。
因为要求的安全性比较高~(银行系统)所以断电,异常退出后用户还是保留登陆状态。必须由其它用户登陆后,将其用户做“强制签退”,并注明原因。其实我们系统IP和用户是绑定的,除非绑定多个IP,否则用户只能在一台机器上登录。这期间还涉及到一些权限的问题,就不细说了。现在这个项目安全要求比较低,如果异常退出,断电等现象我想可以用session超时,在其它机器上登陆一下~之类的方法解决~我的方案可能并不适用于你的系统。只是给你一种解决方案,供你参考下啦~
你能把你的代码贴出来,供我学习一下吗?或者把你QQ给我,向你请教。我的QQ:295833641
记录用户的登录状态和IP地址
用户登录的时进入数据库校验即可
断电什么的是可以通过session超时,自动清除数据库的登录状态
或者仿照银行的cop终端,加入用户复核动作
<listener>
<listener-class>org.springframework.security.ui.session.HttpSessionEventPublisher</listener-class>
</listener>然后再配置文件配置
<http auto-config="true" access-denied-page="/accessDenied.jsp">
<!--即使用户没有登录页可以访问longin.jsp -->
<intercept-url pattern="/login.jsp" filters="none" />
<!--自定义登录界面-->
<form-login login-page="/login.jsp" default-target-url="/index.jsp"
always-use-default-target="true" authentication-failure-url="/login.jsp?error=true" />
<logout logout-url="/loginout.jsp"/>
<concurrent-session-control max-sessions="1"
exception-if-maximum-exceeded="true" />
</http>
可以很好的解决。