phpセッション制御によるアイデンティティ検証の実施例


会話コントロールの思想とは、ウェブサイトで会話によってユーザーを追跡することができるということです。ここで詳細なコードを整理しました。必要なパートナーがいたら参考にしてください。
概要
httpプロトコルは無状態であり、各要求に対して、サービス端末はユーザを区別できない。PHPセッション制御とは、ユーザーに鍵(暗号化されたsession文字列)を与えたことであり、ユーザーの身分証明でもあります。この鍵が開けられる箱(データベース、メモリデータベース、またはファイルを使って作られたもの)をサービス側に保管しています。箱の中にはユーザーの各変数情報が入っています。
伝統的なphp session使用

<?php
//page1.php              
session_start();
$_SESSION['user_var'] = "hello,codekissyoung!";
//      $_SESSION        ,      php           
?>

<?php
//page2.php
session_start();
echo $_SESSION['user_var'];//               
$_SESSION['user_var'] = "bey,codekissyoung!";
?>

<?php
//page3.php     ,        ,  page3.php  
session_start();
session_destroy();
?>
一つお聞きしたいのですが、鍵は?ユーザーに鍵をあげる操作が見えませんでしたか?
この操作はphpの後ろでしてくれました。あなたがアクセスしてから、page 1.phpプログラムが実行されます。start();この時、phpは現在のいくつかの条件(ユーザip、ブラウザ番号、時間など)によってPHPSESSID変数を生成します。http reponseがクライアントに戻ると、このPHPSESSIDはすでにブラウザcookieに存在します。このドメイン名を再度訪問するたびに、このPHPSESSIDはサーバーに送信されます。このPHPSESSIDはここで言っているユーザーキーです。
もう一つの問題は、このPHPSESSIDの安全性は盗撮されやすいですか?偽造されやすいですか?
Httpsを使って改竄を防ぐことができます。PHPSESSIDを使わずに、自分で秘密鍵を作ってユーザーに渡すと偽造を防ぐことができます。盗まれやすいかどうかについては、まだあまり検討していません。例えば、あなたのコンピュータがネットにつながっていると、ハッカーがあなたのコンピュータに侵入します。
作成した秘密鍵をブラウザクッキーに保存します。
  • cookie
  • を設定します。
  • set Cookie('key'、'value'、time()+3600)
  • クッキーを削除します。
  • set Cookie('key'、',time()-1)
  • シングルポイント登録の実現:セッション共有
    シングルポイント登録:複数のサブシステム間でユーザー認証システムを共有しています。その中の一つに登録すれば、すべてのサブシステムにアクセスできます。
    このような情景を考えてみます。サーバーAとBのphp環境が一致していると仮定します。ユーザはサーバーAで自分の鍵を手に入れました。彼はこの鍵を持ってサーバーBに訪問します。サーバーBは知っていますか?
    明らかにできません。サーバAが生成した鍵はサーバが認識していません。
    ユーザーがAまたはBにアクセスしても、生成されたキーはC(同じデータベース、またはキャッシュシステム)に保存されています。ユーザがAまたはBに再度アクセスすると、AとBはC:このユーザの鍵ですか?そうでしたら、ユーザーは自分がAまたはBにある箱を使うことができます。
    
    <?php
    session_regenerate_id();//   session    
    $session_info=array('uid'=>$uid,'session'=>session_encrypt(session_id().time()));
    //    ,$session_info    C  
    ?>
    以下はphpがセッション制御によるアイデンティティ検証の実施例である。
    認証アプリケーション本体:authmain.PHP
    
    <?php 
    //       
    session_start(); 
     
    if((!isset($userid))||(!isset($password))) { 
      $userid=$_POST['userid']; 
      $password=$_POST['password']; 
    //      
    $db_conn=new mysqli("localhost", "root", "","auth"); 
    if(mysqli_connect_errno()){ 
      echo '       :'.mysqli_connect_error(); 
      exit(); 
    } 
    //  SQL     
    $query="SELECT * FROM authorized_users WHERE name='".$userid."' and password=sha1('".$password."')"; 
    $result=$db_conn->query($query); 
    if($result->num_rows>0){ 
      //         
      $_SESSION['valid_user']=$userid; 
    } 
    //        
    $db_conn->close(); 
    } 
    ?> 
    <!DOCTYPE html> 
    <html> 
    <head> 
      <meta charset="UTF-8"> 
      <title>    </title> 
    </head> 
    <body> 
    <h1>  </h1> 
    <?php 
    //           
    if(isset($_SESSION['valid_user'])){ 
      echo $_SESSION['valid_user'].',  ,     '; 
      echo '<a href="logout.php">    </a><br/>'; 
    }else{ 
      if(isset($userid)){ 
        echo '       '; 
      }else{ 
        echo '      <br/>'; 
      } 
      ?> 
      <form method="post" action="authmain.php"> 
        <p>   :<input type="text" name="userid"></p> 
     
        <p>  :<input type="password" name="password"></p> 
     
        <p><input type="submit" name="submit" value="  "></p> 
      </form> 
    <?php 
    } 
    ?> 
    <br/> 
    <a href="members_only.php">    </a> 
     
    </body> 
    </html> 
    
    サイトの有効ユーザーチェック:members_only.php
    
    <!DOCTYPE html> 
    <html> 
    <head> 
      <meta charset="UTF-8"> 
      <title>    </title> 
    </head> 
    <body> 
    <?php 
    //     
    session_start(); 
     
    echo '<h1>    </h1>'; 
    if(isset($_SESSION['valid_user'])){ 
      echo "<p>".$_SESSION['valid_user'].",  ,       </p>"; 
      echo '<p>         </p>'; 
    }else{ 
      echo '<p>        </p>'; 
      echo '<p>            </p>'; 
    } 
    echo '<a href="authmain.php">    </a>'; 
    ?> 
    </body> 
    </html> 
    
    セッション変数をログアウトしてセッションを破棄します。logout.php
    
    <?php 
    //     
    session_start(); 
    $olduser=$_SESSION['valid_user']; 
    //       
    unset($_SESSION['valid_user']); 
    //     
    session_destroy(); 
    ?> 
    <!DOCTYPE html> 
    <html> 
    <head> 
      <meta charset="UTF-8"> 
      <title>    </title> 
    </head> 
    <body> 
    <h1>      !</h1> 
    <?php 
    if(!empty($olduser)){ 
      echo '     <br/>'; 
    }else{ 
      echo '      ,            <br/>'; 
    } 
    ?> 
    <a href="authmain.php">    </a> 
    </body> 
    </html> 
    以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。