ホームページ >バックエンド開発 >PHPチュートリアル >ログイン認証を効率化する方法を教えてください

ログイン認証を効率化する方法を教えてください

WBOY
WBOYオリジナル
2016-06-23 13:53:011020ブラウズ

最近構築したシステムです

ログインは $_COOKIE を使用して行われます

識別子 ($identifier) と確認コード ($token) が自動的に生成され、

$_COOKIE["auth"] = $identifier . ":" . $token ;有做加密,在此先不提加密的事
に保存されます

同時に、
識別子($identifier)とバリデータ($token)はそれぞれSQLの2つのフィールドに保存されます

関数を作成し、confingファイルに操作を導入しました

こうすれば、すべてのページが検証されます

関数は大まかに意味します

list( $identifier, $token) =explode(':', $_COOKIE['auth']);
$_COOKIE によって以前に設定された
識別子 ($identifier) と検証子 ($token) を取得します

次に、データベースを比較します。これら 2 つの値はまったく同じですか?
それらが正しい場合は、通常どおりに操作し、等しくない場合は、それらをクリアします
setcookie('auth', 'DELETED!', time()- 1);


上記を実行すると、自動ログインの効果が得られます

効果と検証は正常に使用できますが、問題は、私たちのウェブサイト...難易度検証機能はデータベースに一度クエリする必要があることです

何か他の方法はありますか?

私は基本的に... 個別のタイムアウトフィールドを作成し、それが空の場合は、それを確認して再度支払う必要があるでしょうか?ちょっと行き詰まったので、いくつかアイデアをください。



ディスカッションへの返信(解決策)

一時的に考えた

ログイン成功後、同時にCOOKIEを設定する

setcookie('next_check',"hahahaha",time()+900) ;

これは15分かかります

ログインするかどうかをチェックする関数の最外層に、

if (!!empty($_COOKIE["next_check"])) {
}

これにはセキュリティ上の問題がありますか?

もちろん、すべてのページをクエリするわけではありません。ログインに成功したら、セッションを書き込み、ユーザー ID、ユーザー名、その他のデータ配列を保存します
毎回セッションを読み取るだけです

問題は、バックグラウンドでアカウントをブロックしましたが、彼のマシン上のセッションがまだ有効であるため、時間内にキックアウトできませんでした

これを解決するには共有メモリが必要です

もちろん、ログインに Cookie を使用する必要があります。私自身の暗号化キーを付けて保存します
Cookie を取得するにはサーバーに復号化キーを設定する必要があります。その後、復号化を元に戻すことで、他の人が Cookie を取得して復号化することを恐れることはありません

もちろん、それはそうですすべてのページでクエリが実行されるわけではありません。ログインに成功したら、セッションを書き込み、ユーザー ID、ユーザー名、その他のデータ配列を保存します
毎回セッションを読み取るだけです

しかし、これにより問題が発生し、バックグラウンドでアカウントをブロックすることができませんでした。彼のマシン上のセッションはまだ有効なので、時間内にキックしてください

これを解決するには共有メモリが必要です

よろしくお願いします
1. 問題は、トラフィックが多いときに負荷がかかることです 質問
2. 私はそうしませんSESSION は書くのが面倒なので使いたくないです。自動ログインするには COOKIE だけを使用する必要がありますよね



今ログインには Cookie を使用しています。もちろん、独自の暗号化キーで暗号化する必要があります。保存します
はい サーバーに復号化キーを設定し、Cookie を取得して復号化します。そうすれば、他の人が Cookie を取得して復号化することを恐れることはありません

では、すべてのページは検証されていますか?


1. 検証のみです。データ変更システム データ データ ページ

2. 拡張検証は、さまざまなデータ ソースから取得する必要があります。識別子と検証子を同じ方法で渡すことは無意味であり、自己欺瞞的です。
3. 「誰かを蹴る」必要がある場合は、常にチェックする必要があります。カスタム セッション ハンドラーを使用して完了できます

Cookie を直接取得し、サーバーのキーを使用して解決します

たとえば、Cookie が変更されている場合、サーバーのキーを使用して解決することはできません。 uid と有効期限を解決できれば、uid 情報を直接クエリしてグローバル変数に保存できます。uid がないことが判明した場合は、改ざんされていることを意味するため、ログを記録する必要があります。またまた


よろしくお願いします
1. 質問 トラフィックが多いと負荷の問題が発生するのではないかと心配です

2. SESSIONは書くのが面倒なので使いたくない、自動で行うためログインするには、COOKIE のみを使用する必要がありますね? 2. Cookie とセッションは連携して動作し、次回のログインは Cookie が担当します。

誰かをキックすることを検討している場合は、ユーザー ID としてキーを使用してユーザーのログイン情報を memcache に書き込むことができます。ユーザーのログイン ステータスと時刻を取得し、キーの有効期限を設定し、ユーザーを認証するときに、ユーザー セッションと指定された memcache キーのデータを比較します。両方があっても問題ありません。ユーザーをキックする必要がある場合は、キーの下の memcache キャッシュを直接クリアしてください

貴重なアドバイスありがとうございます!

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