如何防止用户重复登录?相同账号登录时如何踢掉之前账号

#1 Arthur

各位大侠,如何防止用户重复登录?相同账号登录时如何踢掉之前账号。如果用session的话如何关闭其他用户的session。有点不太清楚,恳请各位赐教!

2014-05-06 23:00:06

#2 jake

放个在线用户表,然后每次访问页面都查询一次。登录后如果发现重复就踢出

2014-05-08 13:49:20

#3 Arthur

谢谢jake,我把我的解决方法是这样的:
1、用户数据表添加一个字段 sessionid;

2、用户登录成功后把sessionid写入上述字段;
        spClass("lib_user")->update(array('uid'=>$_SESSION["userinfo"]['uid']),array('sessionid'=>session_id()));

3、修改spAclModel用户权限操作类(在文件spAcl.php)

/**
         * 检查对应的权限
         *
         * 返回1是通过检查,0是不能通过检查(控制器及动作存在但用户标识没有记录)
         * 返回-1是无该权限控制(即该控制器及动作不存在于权限表中)
         *
         * @param acl_name    用户标识:可以是组名或是用户名
         * @param controller    控制器名称
         * @param action    动作名称
         */
        public function check($acl_name = SPANONYMOUS, $controller, $action)
        {
                $rows = array('controller' => $controller, 'action' => $action );
                if( $acl = $this->findAll($rows) ){
                        foreach($acl as $v){
                                if($v["acl_name"] == SPANONYMOUS || $v["acl_name"] == $acl_name){
                                        $user = spClass('lib_user')->find(array('uid'=>$_SESSION["userinfo"]['uid']));
                                        if ( $user ){
                                                $sessionid = $user['sessionid'];
                                               
                                                if ( $sessionid != session_id()){
                                                        $_SESSION = array ();
                                                        if (isset ( $_COOKIE [session_name ()] )) {
                                                                setcookie ( session_name (), '', time () - 42000, '/' );
                                                        }
                                                        session_unset();
                                                        session_destroy ();
                                                        return 0;
                                                }       
                                        }
                                        return 1;
                                }
                        }
                        return 0;
                }else{
                        return -1;
                }
        }

2014-05-17 22:08:19