入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

在tp中实现单个用户禁止重复登录

创建时间:2017-06-20 投稿人: 浏览次数:871

原理:

权限验证的时候一定要判断数据库写入session_id是不是和$_session里面的session_id是不是一致,如果不一致就退出,这个防止同一个账户被多个人同时登陆的实现方法就是基于这个session_id
一定要设置session的存活时间,和session关掉页面就session消除
如果有其他人登陆的时候,会写入新的session_id,这样旧的用户就会被权限验证不通过,但是不能做到实时效果,这样就挤掉了旧用户,这里有个缺陷,就是每次验证权限的时候就需要查询数据库,如果可以吧这个数据放在redis就比较好
其实其他的验证方法,也类似使用这种方法,有个验证的凭证,只不过这种方法需要查询数据库,但是放在redis之后就比较好
或者统一管理session的时候,比如放在数据库就更好了,记住吧session_id也存入数据库,或者放在memcash,redis就比较方便,比如在redis进行管理的时候,就可以直接更新掉存在session_id


首先设计表:

1 id int(11) AUTO_INCREMENT
2 username varchar(20) utf8_general_ci
3 password varchar(20) utf8_general_ci
4 ip varchar(20) utf8_general_ci
5 session_id varchar(100) utf8_general_ci
6 login_time int(20)


实现:

 public function aa(){

        session_start();
         //ini_set("session.auto_start", 0);                    //关闭session自动启动
         //ini_set("session.cookie_lifetime", 0);//设置session在浏览器关闭时失效
         //ini_set("session.gc_maxlifetime", 3600);  //session在浏览器未关闭时的持续存活时间


        $uname =$_GET["name"];
        $data["name"] = $uname;
        $upwd =$_GET["pwd"];
        $data["pwd"] = $upwd;

        //$data["ip"] = $_SERVER["REMOTE_ADDR"];                 
        //print_r($ipdress);die;
        //$data["login_time"] = time();//登陆时间更新

        //$data["session_id"] = session_id();

        //$_SESSION["name"]=$_GET["name"];

        //$res = M("onlyuser")->add($data);
        //if($res){
            //echo "ok";
        //}else{
            //echo "false";
        //}


    //开始验证 --防止同一个用户重复登录
 $res = M("onlyuser")->where("name = "$uname" AND pwd = "$upwd"")->find();

        if($res){
                   //    var_dump($s);
                  //    echo "<br>";
                 //    echo session_id();
            if($res["session_id"] === session_id()){
                //unset($s["session_id"]);
                echo "ok";
            }  else {
                $ipdress = $_SERVER["REMOTE_ADDR"];
                $login_time = time();
                $session_id = session_id();//重新赋予一个session_id
                $sql = "update user set ip = "$ipdress",login_time= "$login_time",session_id = "$session_id"";
                $result1 =mysql_query($sql);
                // $ss = mysql_fetch_array($result);
                if($result1){
                    echo "OK";

                }  else {
                    echo "F";
                }
            }



        }else {

            echo "FFFFFFFFFFFFFFFFFFFFFFF";


        }

    }



声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。