今回は、ユーザーのリモート ログイン リマインダーを実現するための考えPHP フレームワークを紹介します。ユーザーのリモート ログイン リマインダーを実現するために、thinkPHP フレームワークで実装できる 注意事項は何ですか?
比較的高いセキュリティ要件、特にバックエンド管理が必要な 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()
(2) ユーザー ログイン
ユーザー ログインは、アカウントのパスワードを決定する通常の方法です。 確認コードこれらが確認されると、現在の 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 と比較する必要があります。一致しない場合は、テーブル名のアカウントが別の場所にログインしているため、強制的にオフラインにしてログイン ページに戻ることができます。 rrreee もちろん、リモート ログイン用の IP を取得してリマインダーを与えることもできます:
この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、他の情報に注目してください。関連記事はphp中国語サイトにあります!
以上がthinkPHP フレームワークはユーザー向けのリモート ログイン リマインダーを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。