‘ Remember Me’ CodeIgniterにログイン
-
05-07-2019 - |
質問
CodeIgniterでこれをどのように実装しますか?
解決
(この回答は元の質問に対する回答でした)
これをどのように行いますか?または、どのように 長いセッションを作成します 有効期限は他のものよりも短い?
作成されたすべてのセッションは、 同じ$ config ['sess_expiration']で 構成ファイル(デフォルト:7200秒)、 カスタム値を渡す方法はありますか
セッションCookieの有効期限を延長しても、「私を記憶する」では機能しません。ユーザーがブラウザを閉じるとセッションCookieが失われるためです。 Code Igniterにネイティブの「記憶機能」がない場合は、サーバーが再び表示したときに自動ログインできるようにする情報を含む長寿命のCookieをドロップする何かを記述する必要があります。
永続的ログインCookieのベストプラクティスに関する優れた記事があります。次のように要約します。
で、これらのアイデアのセキュリティを強化する別の記事
- ユーザーが「Remember Me」にチェックマークを付けて正常にログインすると、ログイン に加えてクッキーが発行されます 標準セッション管理Cookie。 2
- ログインCookieには、ユーザーのユーザー名と乱数が含まれています (「トークン」はここから)から 適切に大きなスペース。ユーザー名と トークンは、ペアとして格納されます データベーステーブル。
- ログインしていないユーザーがサイトにアクセスしてログインCookieを提示すると、 ユーザー名とトークンが検索されます データベース内。 1.ペアが存在する場合、ユーザーは認証されたと見なされます。 使用済みトークンは データベース。新しいトークンが生成され、 ユーザー名でデータベースに保存され、 新しいログインを介してユーザーに発行 クッキー。 2.ペアが存在しない場合、ログインCookieは無視されます。
- このメカニズムを介してのみ認証されるユーザーは 特定のアクセスが許可されていません 保護された情報または機能 パスワードの変更、表示など 個人を特定する情報、または 小遣い。それらを実行するには 操作、ユーザーは最初に 正常に提出する ユーザー名/パスワードログインフォーム。
- このアプローチにより、ユーザーは複数の記憶を持つことができます 異なるブラウザからのログインまたは コンピューター、メカニズムが提供されます 記憶されているすべてを消去するユーザー 1回の操作でログインします。
これらの記事のプラクティスに従えば、間違いはありません!
他のヒント
「改善された永続的ログインCookieのベストプラクティス」からの提案を再検討することをお勧めします。問題の分析をサイトに投稿しましたが、その要点は次のとおりです。
安全な回線がないとCookieが盗まれるのを防ぐことはできません。何でも
(*「セキュアライン」とは、SSL / VPNトンネリング/公開キー暗号化、または堅牢なチャレンジ/レスポンス方式*)
私は永続的なログインのベストプラクティスに賛成していますが、少しの裏技も役に立たず、唯一の方法はSSLであるという点があります。
解決策をありがとう。 これをCIプロジェクトに実装しました。
DEV注:Cookieには、remember-meキーとしてセキュアハッシュが必要です。 -ユーザーIDを保存しないでください) -パスワードを保存しないでください。 -そして、パスワードのハッシュを保存しません。 そうすれば、人々はどのアカウントにも自動的にログインできません。
最悪のシナリオ:ハッカーがハッシュメソッドを発見するとすぐに、キープロデューサー機能を1か所で調整でき、セキュリティが再設定されます。塩と胡pepperの糸を調整するだけです。
役立つことを願っています。 クリスD.-オーストラリアから:)
これらのことのために、すべてのクラスのCI変数は、独自のライブラリからアクセスできます:
例:
$this->session->sess_expiration = 500000;
問題を解決することを願っています。
githubにはダウンロードしたことを思い出すためのライブラリがあります。
このライブラリのsetCookie()関数を使用すると、次のことが起こります。
1。一意の番号を含むCookieが生成されます この番号は、setCookie()に渡されるnetid / usernameとともにci_cookiesと呼ばれるデータベーステーブルに記録されます
2。verifyCookie()関数が呼び出されるとき、ブラウザーのCookieハッシュはデータベースに記録されたハッシュと一致する必要があります。存在する場合、verifyCookie()はtrueを返し、ホームページに転送します
セッションをロードする前にconfを設定する必要があります
$do_not_remember = (boolean) $this->input->post('do_not_remember');
if ($do_not_remember) {
$this->config->set_item('sess_expiration', 0);
$this->config->set_item('sess_expire_on_close', true);
}
$this->load->library('session');