ホームページ >php教程 >php手册 >PHP は完全かつ安全なユーザー ログイン システムを開発します

PHP は完全かつ安全なユーザー ログイン システムを開発します

WBOY
WBOYオリジナル
2016-06-21 08:57:44859ブラウズ

PHP でプログラミングするとき、私は PHPLib や他の同様のライブラリなどの既製のライブラリ ファイルを使用しない習慣があります。このシステムでは、認証を処理する必要があるライブラリ ファイルも自分で作成する予定です。電子メールの確認、アカウント (パスワード、電子メール) の更新など。

既存のデータベースへの負担を増やすことなくシステムのセキュリティを確保するため。したがって、この新しいシステムは Cookie に依存しています。これは確かにジレンマです。ユーザー名を使用して Cookie を設定するだけでは非常に安全ではないため、これは機能しませんが、データベースへの負担を考慮すると、単純な順序なしコードを追加して検証のためにデータベースに渡すことはできません。 。

解決策は、2 つの Cookie を同時に設定することです。1 つはユーザー名 Cookie、もう 1 つは順序なし Cookie です。この順序付けされていないコードは、実際には、md5() 関数操作を通じてユーザー名とスーパー パスワード (プログラマのみが知っている) の組み合わせによって生成されます。 md5() は一方向の不規則コードであるため、解読できません。ユーザーが電子メールを変更した場合、電子メールとスーパー パスワードを使用してランダム コードを生成し、ユーザーが変更を確認できるようにすることもできます。これは実際には公開鍵/秘密鍵タイプのシステムです。分かりませんか?関係ないので、以下ゆっくり解説していきます。

興味深いのは、このシステムの主な仕事は md5() 関数の値を計算することであり、負荷がかかると Web サーバーによって完了するため、このシステムのスケーラビリティは無限大に達する可能性があることです。認証システムがデータベース全体に影響を与えることはありませんが、追加することで最終的なボトルネックがデータベースにのみ現れることになります。

このライブラリには、トークン生成関数とトークン認証関数という 2 つの関数があります。

  <?php<br>    $hidden_hash_var='your_secret_password_here';<br>    $LOGGED_IN=false;<br>    unset($LOGGED_IN);<br>    function user_isloggedin() {<br>     global $user_name,$id_hash,$hidden_hash_var,$LOGGED_IN;<br>     file://已经进行无序码的检测了吗<br>     file://如果是的话,返回该变量<br>     if ( isset($LOGGED_IN) ) {<br>      return $LOGGED_IN;<br>      }<br>     file://are both cookies present?<br>     if ($user_name && $id_hash) {<br>     /*<br>      由cookies中得来的用户名和系统超级密码产生一个认证用的无序码如果该无序码与cookie中的无序码一样,则cookies中的变量是可信的,用户已经登录<br>     */<br>      $hash=md5($user_name.$hidden_hash_var);<br>      if ($hash == $id_hash) {<br>       file://无序码符合,设置一个全局变量,这样我们在再次调用该函数的时候,<br>       file://就无需再次进行md5()运算<br>       $LOGGED_IN=true;<br>       return true;<br>      } else {<br>       file://两个无序码不符合,没有登录<br>       $LOGGED_IN=false;<br>       return false;<br>      }<br>      } else {<br>       $LOGGED_IN=false;<br>       return false;<br>       }<br>      }<br>    function user_set_tokens($user_name_in) {<br>     /*<br>      一旦用户名和密码通过验证,就调用这个函数<br>     */<br>     global $hidden_hash_var,$user_name,$id_hash;<br>      if (!$user_name_in) {<br>       $feedback .= ' ERROR - User Name Missing When Setting Tokens ';<br>       return false;<br>       }<br>     $user_name=strtolower($user_name_in);<br>      file://使用用户名和超级密码创建一个无序码,作判断是否已经登录用<br>      $id_hash= md5($user_name.$hidden_hash_var);<br>      file://设置cookies的有效期为一个月,可设置为任何的值<br>      setcookie('user_name',$user_name,(time()+2592000),'/','',0);<br>      setcookie('id_hash',$id_hash,(time()+2592000),'/','',0);<br>     }<br>   ?>

別の興味深いコードを見てみましょう。ユーザーはどのようにしてメール アドレスを安全に変更できるでしょうか。電子メール アドレスはいつでも変更できますが、確認が必要です。



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