1。如何用bs模式实现限制用户只能通过一个端口登录,同时在两地登录则后者无法登录2。如何记录用户登录时间长度,尤其是退出时间。谢谢,高分求答案

解决方案 »

  1.   

    在数据库设置标示位肯定行不通,避免不了非法退出,以及断电的情况。
    现在常用的有单点登录。以及session监听
      

  2.   

    我问楼主用的是不是 j2ee的 webproject 如tomcat做服务器,如果是:采用acegi安全策略作为管理登录最为合适,
    仅需要在web.html加入点东西,
    然后配置security.xml:
    设置: <bean id="concurrentSessionController"  
            class="org.acegisecurity.concurrent.ConcurrentSessionControllerImpl">  
            <property name="maximumSessions" value="1"></property>  <!-- 最大登录用户为1-->
            <property name="sessionRegistry" ref="sessionRegistry"></property>  
            <property name="exceptionIfMaximumExceeded" value="true"></property> 
            <!-- 是否不被异地同账号登录?-->
        </bean>   
      

  3.   

    第一个问题:登录以后把登录的(ID,logtime,logouttime)写入一个list中,再次登录的时候遍历这个list,如果在list中找到该用户已经登录,则给出提示后者不能登录。同时,这个list每隔一段时间查找list中的用户是否都在线。这样的好处:避免过多操作数据库给数据库带来压力,同时能够对第二个问题提供支持。
    第二个问题:肯定存在着非法退出。这样的话以list查找用户是否在线时用户不在线则为下线时间。正常退出则保存正常退出的时间存入logouttime。如果退出,则保存该条记录到数据库或者写入文件。
      

  4.   

    加一个loginTicket的表  每次用户登录后 记录下该用户id 和登录时间 并且标志位为已登录。。新登录的用户需要做的操作:
    1.查询loginTicket表有无该用户,并且标志位是已登录的。
      如果没有,执行3;如果有,执行2.
    2.检查当前时间-该用户的登录时间是否大于“有效时间”。
      如果大于,更改标志位为已退出,并执行3;如果没有,打印“不能异地登陆”。
    3.记录登录用户ID和登录时间,标志位设为已登录。登录用户存如session。PS:loginTicket表还可以增加一些退出时间的字段;“有效时间”可以设置成session的生命周期;如果有异常退出或者断电的情况,则在原用户“有效时间过后”,可以执行异地登陆了;可以扩展“强制登录”的功能。