ホームページ > バックエンド開発 > PHPチュートリアル > アカウントは同時に同じデバイスにのみログインできます

アカウントは同時に同じデバイスにのみログインできます

WBOY
リリース: 2016-09-19 09:16:36
オリジナル
4984 人が閲覧しました

PHP を使用して、アカウントは同時に同じデバイスにのみログインできることを認識しています。同じ IP ではないことに注意してください。
前に、ログインしているかどうかを示すフィールドを MYSQL テーブルに追加しました。ログインしている場合は 1 に設定され、ログアウトしている場合は 0 に設定されます。
しかし、後で気づきました。ブラウザが強制的に閉じられた場合、このフィールドを 0 に設定する方法はありません。
ずっと考えたのですが解決策が思いつきませんでした。後でネットで調べたらredisを使えば実装できそうなので、ここ2日ほどでredisの勉強を始めました。しかし、このまま勉強を続けても何も分からないことが分かりました。
それで私はアドバイスを求めるためにここに来ました。経験のある人はそれを達成する方法を教えてもらえますか?ありがとう!中秋節おめでとうございます!

返信内容:

PHP を使用して、アカウントは同時に同じデバイスにのみログインできることを認識しています。同じ IP ではないことに注意してください。
前に、ログインしているかどうかを示すフィールドを MYSQL テーブルに追加しました。ログインしている場合は 1 に設定され、ログアウトしている場合は 0 に設定されます。
しかし、後で気づきました。ブラウザが強制的に閉じられた場合、このフィールドを 0 に設定する方法はありません。
ずっと考えたのですが解決策が思いつきませんでした。後でネットで調べたらredisを使えば実装できそうなので、ここ2日ほどでredisの勉強を始めました。しかし、このまま勉強を続けても何も分からないことが分かりました。
それで私はアドバイスを求めるためにここに来ました。経験のある人はそれを達成する方法を教えてもらえますか?ありがとう!中秋節おめでとうございます!

Redis の場合、ハッシュ構造を使用してアカウントのログイン情報を保存できます。

ハッシュ構造: キーフィールド値

ハッシュ関連コマンド http://redisdoc.com/hash/inde...

詳細な実装:

ハッシュ構造では、同じキーフィールドを使用してデータを書き込むと、履歴データが上書きされます

リーリー

このようにして、アカウントのログイン情報を保存するキーを指定すると、ログインごとに以前のログイン情報が消去されます。これで以前のログイン状態は無効になります

異なるデバイスのログインを考慮する場合は、フィールドを devicename-uid の形式に変更して、1 つのデバイスに対して 1 つのログイン情報のみが存在できるようにすることができます。

何が必要なのか知りたいですか?
シングル サインオンですか? それとも単一デバイスを制限しますか?
単一デバイスは複数のブラウザーを備えた同じコンピューターですか?

mysqlの使用に関する解決策

効率を考慮しない場合は、mysql で元のレコード ログイン済み のフィールドの横に 2 つのフィールド 有効期限一意のデバイス識別子 を追加し、以前のログを取得するかどうかを判断する条件を変更するだけで済みます。 "Is it 1" は、"Is it 1、有効期限が切れておらず、デバイス固有の識別子が一致しています" になります。 有効期限の値は、ユーザーが操作を実行するたびに更新され、一定期間操作がなかった場合、ログインステータスが「自動的に」期限切れになる可能性があります。これにより、「設定する方法がない」という問題を解決できます。ブラウザが強制的に閉じられると、このフィールドが 0 になる問題があります。

簡単な実装にはphpredisを使用してください

初めての方はこちらの方が良いかも知れませんredis,且仅仅需要用redis做用户登录的控制,对于数据结构,你不是很了解,string类型即可满足你(如果可以,使用hash)。

以下は、背景として phpredis 拡張機能によって提供される関連クラスを使用して説明されています。

特定のアカウント

が100にログインしていると仮定し、ログインデバイス情報をredisに記録します用户id リーリー

デバイスが他の操作を実行するたびに、redis内のデバイス情報の有効期限を更新する必要があります

リーリー

デバイスのユーザーアカウントがログアウトすると、Redis内のデバイス情報をクリアする必要があります

リーリー

もちろん、ハッシュ型の代わりに文字列型を使用する上記の解決策は、リソースの使用率と効率の観点から合理的ではありません。 Redis をより深く理解して応用したい場合は、「Redis IN ACTION」という書籍を読むことをお勧めします。 php での redis の使用に特有で、phpredis 拡張機能または predis の使用を選択できます。

私が少し前に取り組んだプロジェクトは、おそらく次のようなものでした。一般的な目的は、このアカウントにログインできる端末は 1 つだけ、つまり 1 つのアカウントで同時に複数の場所にログインできないということでした。

解決策は、データベースにフィールド トークンを追加することです。ログインするたびに、タイムスタンプなどに基づいて新しいトークンが生成され、トークンが変更された場合、それはユーザーが変更されたことを意味します。別の場所でログインしています。

データベースにフィールドを追加します: 一時トークン。ログイン後、この一時トークンがランダムに生成され、ユーザーは別のデバイスがログインすると、一時トークンが更新されます。デバイスのセッションはデータベースのトークンと一致しません。自動的に飛び出します。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート