ホームページ  >  記事  >  バックエンド開発  >  完全で安全なユーザー ログイン system_PHP チュートリアル

完全で安全なユーザー ログイン system_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:08:581080ブラウズ

PHP でプログラミングするとき、私は PHPLib や他の同様のライブラリなどの既製のライブラリ ファイルを使用しない習慣があります。このシステムでは、認証、メールの確認を処理する必要があるライブラリ ファイルも自分で作成する予定です。 、アカウント (パスワード、メールアドレス) などを更新します。
既存のデータベースへの負担を増やすことなく、システムのセキュリティを確保するため。したがって、この新しいシステムは Cookie に依存しています。これは確かにジレンマです。ユーザー名を使用して Cookie を設定するだけでは非常に安全ではないため、これは機能しませんが、データベースへの負担を考慮すると、単純な順序なしコードを追加して検証のためにデータベースに渡すことはできません。 。

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

興味深いことに、このシステムの主な作業は md5() 関数の値を計算することであり、負荷が増加すると他のサーバーを追加できるため、このシステムのスケーラビリティは無限大に達する可能性があります。負荷を共有することにより、認証システムはデータベース全体に影響を及ぼしませんが、そうすることで最終的なボトルネックがデータベース内にのみ現れるようになります。

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


$hidden_​​hash_var='your_secret_password_here';

$LOGGED_IN=false;
unset($LOGGED_IN);

関数 user_isloggedin() {
グローバル $user_name,$id_hash,$hidden_​​hash_var,$LOGGED_IN;
File://障害コードは検出されましたか?
file://「はい」の場合、この変数を返します

if ( isset($LOGGED_IN) ) {

$LOGGED_IN を返します;

}

file:// 両方の Cookie が存在しますか?

if ($user_name && $id_hash) {

/*

認証用のランダム コードは、Cookie から取得したユーザー名とシステム スーパー パスワードから生成されます。ランダム コードが Cookie 内のランダム コードと同じであれば、Cookie 内の変数は信頼でき、ユーザーはログインしたことになります。
*/

$hash=md5($user_name.$hidden_​​hash_var);

if ($hash == $id_hash) {

File:// 順序付けされていないコードが一致し、グローバル変数を設定して、関数を再度呼び出すときに、

file://、md5() 操作を再度実行する必要はありません

$LOGGED_IN=true;

trueを返します;

} else {

file:// 2 つの障害コードが一致しないため、ログインできません

$LOGGED_IN=false;

return false;

}

} else {

$LOGGED_IN=false;

return false;

}

}

function user_set_tokens($user_name_in) {

/*

ユーザー名とパスワードが検証されたら、この関数を呼び出します

http://www.bkjia.com/PHPjc/629782.html

tru​​ehttp://www.bkjia.com/PHPjc/629782.html技術記事 PHPでプログラミングするとき、私はPHPLibや他の同様のライブラリなどの既製のライブラリファイルを使用しない習慣があります。このシステムでは、ライブラリも自分で書くつもりです...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。