ホームページ >バックエンド開発 >PHPチュートリアル >PHP は、コード共有により、同じアカウントでは複数の人が同時にログインできないことを認識します。

PHP は、コード共有により、同じアカウントでは複数の人が同時にログインできないことを認識します。

小云云
小云云オリジナル
2018-03-14 11:25:372702ブラウズ

権限を検証する際は、データベースに書き込まれた session_id が $_session の session_id と一致するかどうかを判断する必要があります。一致しない場合は、同じアカウントが同時にログインすることを防ぐため、この実装メソッドを終了します。この session_id に基づいています。

必ずセッション生存時間を設定し、セッションページを閉じてセッションを削除してください
他の人がログインすると、新しいsession_idが書き込まれるため、古いユーザーは権限検証に失敗しますが、これは実行できません-time 効果により、古いユーザーが排除されてしまいます。つまり、権限を確認するたびにデータベースにクエリを実行する必要があるということです。可能であれば、このデータを redis に配置する方がよいでしょう。他の検証方法でもこれを使用できます。この方法には検証証明書がありますが、この方法ではデータベースにクエリを実行する必要がありますが、セッションを均一に管理する場合はデータベースに配置する方がよいことを覚えておいてください。 session_id もデータベースに保存されるか、memcash に配置されます。たとえば、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";  
       //}  
  
  
   //开始验证 --防止同一个用户重复登录  
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;;  
  
  
       }  
  
   }

ユーザー名でログインが繰り返される場合の対処方法

以上がPHP は、コード共有により、同じアカウントでは複数の人が同時にログインできないことを認識します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。