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
。