10

これを CodeIgniter でどのように実装しますか?

4

6 に答える 6

33

(この回答は元の質問への回答です)

これをどうしますか?または、他のセッションよりも有効期限が長いセッションをどのように作成しますか?

作成されたすべてのセッションは、構成ファイルで同じ $config['sess_expiration'] を使用します (デフォルト: 7200 秒)。カスタム値を渡す方法はありますか?

ユーザーがブラウザーを閉じるとセッション Cookie が失われるため、セッション Cookie の有効期限を延長しても、「remember me」機能では機能しません。Code Igniter にネイティブの「記憶機能」がない場合は、サーバーが再認識したときに自動ログインを可能にする情報を含む長寿命 Cookie をドロップするように何かを記述する必要があります。

Persistent Login Cookie Best Practiceに関する優れた記事があり、次のように要約できます。

  1. ユーザーが「Remember Me」をオンにしてログインに成功すると、標準のセッション管理 Cookie に加えてログイン Cookie が発行されます。2
  2. ログイン Cookie には、適切な大きさのスペースからのユーザーのユーザー名と乱数 (以降「トークン」) が含まれます。ユーザー名とトークンは、データベース テーブルにペアとして格納されます。
  3. ログインしていないユーザーがサイトにアクセスしてログイン Cookie を提示すると、ユーザー名とトークンがデータベースで検索されます。1. ペアが存在する場合、ユーザーは認証済みと見なされます。使用されたトークンはデータベースから削除されます。新しいトークンが生成され、ユーザー名とともにデータベースに保存され、新しいログイン Cookie を介してユーザーに発行されます。2. ペアが存在しない場合、ログイン Cookie は無視されます。
  4. このメカニズムによってのみ認証されたユーザーは、パスワードの変更、個人を特定する情報の表示、またはお金の使用など、特定の保護された情報または機能へのアクセスを許可されません。これらの操作を実行するには、ユーザーは最初に通常のユーザー名/パスワード ログイン フォームを正常に送信する必要があります。
  5. このアプローチにより、ユーザーは異なるブラウザーまたはコンピューターからの複数の記憶されたログインを持つことができるため、ユーザーが 1 回の操作で記憶されたすべてのログインを消去するメカニズムが提供されます。

改善された永続ログイン Cookie のベスト プラクティスで、これらのアイデアにさらにセキュリティを構築する別の記事

これらの記事の実践に従えば、大失敗することはありません!

于 2009-01-07T11:09:53.490 に答える
3

You might want to reconsider the suggestion from 'Improved Persistent Login Cookie Best Practice'. I've posted my analysis of the problem on the site, but the gist of it is this:

You can not prevent cookie stealing without a secure line, no matter what

(*By 'secure line', I mean SSL / VPN tunneling / public-key encryption - or a robust challenge-response scheme *)

I'm all for persistent login best practices, but there's a point where no amount of trickery is going to help, and where the only way up is SSL.

于 2009-01-25T04:05:34.143 に答える
1

解決してくれてありがとう。これをCIプロジェクトに実装しました。

DEV注:Cookieには、remember-meキーとして保護されたハッシュが必要です。-ユーザーIDだけを保存しないでください)-パスワードを保存しないでください-パスワードのハッシュを保存しないでください。そうすれば、人々はどのアカウントにも自動的にログインできなくなります。

最悪のシナリオ:ハッカーがハッシュメソッドを発見するとすぐに、キープロデューサー機能を1か所で調整でき、セキュリティが再設定されます。塩コショウのひもを調整するだけです。

お役に立てば幸いです。クリスD.-オーストラリアから:)

于 2011-01-12T02:14:08.983 に答える
0

github にライブラリがあり、remember me をダウンロードしてください。

このライブラリの setCookie() 関数を使用すると、次のことが起こります。

1. 一意の番号を含む Cookie が生成されます。この番号は、setCookie() に渡された netid/username とともに ci_cookies と呼ばれるデータベース テーブルに記録されます。

2.verifyCookie() 関数が呼び出されるとき、ブラウザの Cookie ハッシュは、データベースに記録されたハッシュと一致する必要があります。存在する場合、verifyCookie() は true を返し、ホームページに転送します

于 2012-03-17T10:11:23.977 に答える
0

これらについては、すべてのクラスの CI 変数に独自のライブラリからアクセスできます。

例えば:

$this->session->sess_expiration = 500000;

問題が解決することを願っています。

于 2012-02-01T04:56:31.927 に答える
0

セッションをロードする前に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');
于 2015-10-19T19:19:33.223 に答える