Maison  >  Article  >  développement back-end  >  PHP se rend compte qu'un même compte ne permet pas à plusieurs personnes de se connecter en même temps, partage de code

PHP se rend compte qu'un même compte ne permet pas à plusieurs personnes de se connecter en même temps, partage de code

小云云
小云云original
2018-03-14 11:25:372653parcourir

Lors de la vérification des autorisations, vous devez déterminer si le session_id écrit dans la base de données est cohérent avec le session_id dans $_session, quittez cette méthode d'implémentation pour empêcher le même compte d'être connecté par plusieurs personnes. le même temps est basé sur ce session_id.

Assurez-vous de définir la durée de survie de la session, et la session sera éliminée si vous fermez la page
Si quelqu'un d'autre se connecte, un nouveau session_id sera écrit, afin que l'ancien utilisateur ne soit pas capable de vérifier les autorisations. Il réussit, mais il ne peut pas obtenir d'effets en temps réel, éliminant ainsi les anciens utilisateurs. Il y a un défaut ici, c'est-à-dire que vous devez interroger la base de données à chaque fois que vous vérifiez les autorisations. Ce serait mieux de mettre ces données dans redis
En fait, il y en a d'autres. La méthode de vérification est similaire à cette méthode. Il existe un certificat de vérification. Cependant, cette méthode nécessite d'interroger la base de données, mais il est préférable de la mettre derrière. redis
ou lors de la gestion des sessions de manière unifiée, il est préférable de le mettre dans la base de données. D'accord, rappelez-vous que session_id est également stocké dans la base de données, ou dans Redis, par exemple, lors de la gestion de Redis. , vous pouvez directement mettre à jour le session_id existant

Commencez par concevoir la table :

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)

Implémentation :

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";  
       //}  
  
  
   //开始验证 --防止同一个用户重复登录  
nbsp;$res = M("onlyuser")->where("name = '$uname' AND pwd = '$upwd'")->find();  
  
       if($res){  
                  //    var_dump($s);  
                 //    echo &#39;<br>&#39;;  
                //    echo session_id();  
           if($res[&#39;session_id&#39;] === session_id()){  
               //unset($s[&#39;session_id&#39;]);  
               echo "ok";  
           }  else {  
               $ipdress = $_SERVER[&#39;REMOTE_ADDR&#39;];  
               $login_time = time();  
               $session_id = session_id();//重新赋予一个session_id  
               $sql = "update user set ip = &#39;$ipdress&#39;,login_time= &#39;$login_time&#39;,session_id = &#39;$session_id&#39;";  
               $result1 =mysql_query($sql);  
               // $ss = mysql_fetch_array($result);  
               if($result1){  
                   echo &#39;OK&#39;;  
  
               }  else {  
                   echo &#39;F&#39;;  
               }  
           }  
  
  
  
       }else {  
  
           echo &#39;FFFFFFFFFFFFFFFFFFFFFFF&#39;;  
  
  
       }  
  
   }

Recommandations associées :

Comment empêcher un nom d'utilisateur de se connecter à plusieurs reprises et comment y faire face

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn