ホームページ >バックエンド開発 >PHPチュートリアル >【ユーザーログイン判定】PHPの判定処理は正しいですか?毎回データベースにクエリを実行し、COOKIE を保存します

【ユーザーログイン判定】PHPの判定処理は正しいですか?毎回データベースにクエリを実行し、COOKIE を保存します

WBOY
WBOYオリジナル
2016-06-13 11:59:49856ブラウズ

【ユーザーログイン判定】PHPの判定処理は正しいですか?毎回データ インベントリ COOKIE をクエリします
ユーザーがログインしているかどうかを判断するために独自の PHP を作成しました:

[プロセス]
1 まず cookie('uid') があるかどうかを判断します && cookie('uid' ) ループからの飛び出しがない場合は検出
2 ある場合は、データベースに接続して uid に対応するレコードをクエリし、レコードに変化がない場合はループから抜け出します。ループを検出し、すべてのユーザー cookie をログアウトします
3 存在する場合は、cookie('upwd')= = md5($rs[pwd].cookie('salt')) を検出します。それらが等しくない場合は、プロンプトが表示されます。パスワードが変更されたため、再度ログインする必要があることを示します
4 それらが等しい場合は、cookie('email') == md5($rs[email ]) を確認します。等しくない場合は、次のメッセージが表示されます。メールボックスが変更されたため、再度ログインする必要があります
5 それらが等しい => 正しい場合、そのユーザーは現在ログインしているユーザーです。

でも!
[問題]
1 毎回データベースに接続する必要があるため、データベース クエリを減らすことがユーザー最適化の鍵となります。データベースに毎回クエリを実行すると、パフォーマンスに大きな影響を与えます。
2 最適化する方法は何ですか? このログイン判定プロセスは間違っていますか?

【別の考え方】
1 SESSION に保存し、$uid、$uname、$lastactive (最終応答時間) をセッションに保存します。
2 time()-$lastactive > 3600 を検出するための session('uid') && session('uname') がある場合は、データベースに接続して (上記の Cookie によって判断されます)、それ以外の場合は直接クエリします。 use (セッションの保存場所 php .ini のデフォルト設定の場所)

【質問】
1 SESSION に保存した場合、同時実行性が高い場合は影響を受けますか?


-----解決策---------------------------- -
2 番目のソリューションを使用する場合、最初のソリューションを選択したとき、高い同時実行性が懸念されました。
では、最初のソリューションを採用する場合、高い同時実行性は無視できますか。

最初のソリューションでは、ユーザーのパスワードと電子メールが Cookie に保存されています。このデータは常にネットワーク上で動作しています。安全だと思いますか?

データベースは一般化する必要があります
ファイル システム ベースのリレーショナル データベース (SQL) は若干遅いかもしれませんが、すべてメモリ ベースのメモリ テーブルを提供します
データベースには別のブランチがあることは言うまでもありません: メモリベースの noSQL
そのため、データベース クエリによって生じる追加のオーバーヘッドは無視できます

ユーザーがログインしているかどうかを判断するプロセスは次のとおりです。
Cookie('uid') が存在しない場合、リクエストを転送します。 ログイン処理
それ以外の場合は、データベースにクエリを実行して、uid の最後のログイン場所が今回と同じかどうかを確認します。
同じ場合は確認します。
異なる場合は、プロンプトを発行し、条件付きでリクエストログイン処理に転送
-- ----解決策-----
これが私のやり方です。
1. ユーザーがログインしてデータベースに接続し、成功したかどうかを判定します。成功した場合は、セッションと Cookie にユーザー ID、ユーザー名などの情報を書き込みます。 (たとえば、1 日から 2 週間まで、これはユーザーがログイン時に選択できるようにします) さらに、Cookie に保存されたデータの json_encode を作成し、それを暗号化しました。
たとえば、{"uid":1,"username":"fdipzone"} は、可逆文字列に暗号化されます。

2. ユーザーがアクセスすると、次のような状況になります。
1. セッションが存在するかどうかを確認します -> はい -> パス
2. セッションが存在するかどうかを確認します ->いいえ-> クッキーが存在するかどうかを確認します-> はい-> セッションにクッキーを書き込みます-> いいえ- > Cookie が存在するかどうかを判断します -> はい -> Cookie の復号化が成功したかどうかを判断します -> いいえ -> ログイン ページに移動します
4. セッションが存在するかどうかを判断します ->いいえ ->存在します -> ;いいえ->ログインページにジャンプします

-----解決策---------訂正です。
セッションの有効期限が切れたら、セッションに Cookie を書き込みます。この場所でデータベースに接続し、ユーザーのログインが禁止されているかどうかが判断されます。
セッションには独自の有効期限があるため、各データベースチェック間の時間間隔がセッションのライフサイクルになります。

セッションが存在するかどうかを判断します -> いいえ -> Cookie が存在するかどうかを判断します -> はい -> Cookie の復号化が成功したかどうかを判断します -> はい ->
ログインしているかどうかを確認します禁止されています -> いいえ -> セッションに Cookie を書き込みます ->
を使用してセッションが存在するかどうかを判断します -> いいえ -> Cookie が存在するかどうかを判断します -> はい -> 判断しますCookie の復号化が成功したかどうか - > はい ->
ログインが禁止されているかどうかを確認します ->はい -> ユーザーの Cookie をクリアします ->通知ページにジャンプします

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