今回は、PHP ユーザー向けのリモート ログイン リマインダーの実装コードをお届けします。PHP ユーザー向けのリモート ログイン リマインダーを実装するための 注意事項は何ですか? ここで実際のケースを見てみましょう。
比較的高いセキュリティ要件、特にバックエンド管理が必要な Web サイトの場合、場合によっては、アカウントが盗まれているかどうか、または現在別の人がログインしてバックエンド操作を実行しているかどうかを確認する必要があります。これらは非常に危険です。同時にログインして操作する個人は、アカウントを強制的にオフラインにすることができます。 もちろん、IPは特定のネットワークセグメント内でいつでも変わるため、IPで判断することはできませんが、同じブラウザを使用している限り、この問題を解決できるメカニズムがあります。それがセッションです。 Web サイトにアクセスする場合、ブラウザーは変更されず、各訪問者の session_id は変更されません。これはまさにこの問題を解決するために必要なことです。 TP フレームワークによって構築された Web サイトのバックエンドを例に挙げます。アイデアは次のとおりです:(1) データベース ユーザー テーブル
ユーザー テーブルに、フィールド`session_id` varchar(32) を追加します。
、ログイン後に session_id を保存するために使用されます。 `session_id` varchar(32)
,用来存放登录之后的session_id。
(2)用户登录
用户登录,就是正常的判断账号密码以及验证码,当这些都验证通过的时候,取出当前的session_id存入数据库user表中。
M('user')->where(array('id'=>$_SESSION['uid']))->save(array('session_id'=>session_id()));
(3)解决异地登录问题
对于后台操作,为了便于验证和操作安全,基本都会先创建一个基础控制器BaseController,然后后台的其他操作控制器都继承这个基础控制器。对于后台的每一步操作之前,用户状态的检测都放在BaseController控制器的初始化_initialize()
方法中。
现在在_initialize()
ユーザー ログインは、アカウントのパスワードを決定する通常の方法です。と 確認コード
、これらが確認されたら、現在の session_id を取り出して保存します。データベースユーザーテーブル。$user = M('user')->where(array('id'=>$_SESSION['uid']))->find(); $session_id = session_id(); if($user['session_id'] != $session_id){ session_destroy(); $this->error('您的账号在其他地方登录,您已经被强制下线', U('login')); }
(3) リモートログイン問題の解決
バックグラウンド操作では、検証と動作セキュリティを容易にするために、基本的にベースコントローラーBaseControllerが最初に作成され、バックグラウンドの他の操作コントローラーはこのベースコントローラーを継承します。バックグラウンド操作の各ステップの前に、ユーザー ステータスの検出が BaseController コントローラーの初期化 _initialize()
メソッドに配置されます。
ここで、_initialize()
メソッドでは、ユーザーのログイン状態がロックされているかどうかなどを確認することに加えて、ローカルの session_id を取り出して、ユーザー テーブルに格納されている session_id と比較する必要があります。一致しない場合は、テーブル名のアカウントが別の場所にログインしているため、強制的にオフラインにしてログイン ページに戻ることができます。
以上がPHP ユーザーのリモート ログイン リマインダーの実装コードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。