16

セッションで自分のサイトでログイン機能を使用しています。このセッションは、ユーザーがログアウトしたかどうかに関係なく、数分後に期限切れになります。今私が欲しいのは、ユーザーがログアウトしたときにのみセッションが期限切れになることです。ユーザーが自分のアカウントからログアウトせず、2〜3日後に戻ってきた場合でも、ログインしているように見えるはずです。

セッションの有効期限が切れる時間を増やした例をいくつか見つけましたが、ユーザーがログアウトにかかった時間に関係なく、ログアウトイベントでのみ有効期限が切れるようにしたいです。

どうやってやるの?

特に、これはそうするための正しい方法ですか?

session_cache_expire(0);
session_start();
4

3 に答える 3

28

この状況でよく使用される解決策は、次のとおりです。

  • セッション期間が長すぎない:ユーザーがアクティブでない場合は期限切れになります(これが機能する方法です。ユーザーが多い場合はサーバーに適しています)
  • ユーザーがログインするときに、ユーザーが認識されるために必要なものを含むCookieを設定します
  • 彼がサイトに戻ってきた場合(Cookieを使用し、アクティブなセッションがない場合)、そのCookieに含まれる情報を使用して自動ログインし、同時にセッションを再作成します。

こちらです:

  • 正当な理由もなく「アクティブ」なセッションが何千もありません
  • あなたはセッションが機能する標準的な方法を維持します

また、少なくともユーザーの観点からは、「ログアウトされない」という利点があります。

また、「通常の」セッションでは、ユーザーがブラウザを閉じると、セッションIDを含むCookieが削除されるため、セッションの有効期間に関係なく、ユーザーは切断されることに注意してください。
私が提案する解決策では、ユーザーのコンピューターにCookieを保持する期間を設定するのはあなたです;-)


ただし、ユーザーが手動でログアウトする場合は、もちろん、セッションとCookieの両方を削除する必要があるため、すぐに再自動ログインすることはありません。


もちろん、Cookieに何を設定するかについて注意する必要があります。Cookieは完全に安全ではないため、たとえば、Cookieにパスワードを保存しないでください;-)


実際、この方法で「rememberme」機能がよく機能します。ただし、ここでは、ユーザーが「rememberme」をアクティブにするためにチェックボックスをオンにする必要はありません;-)


そのようなものを開発する時間がない場合、非常に迅速で汚い方法は、すべてのページでAjaxリクエストを使用することです。これにより、サーバー上のPHPページに「ping」が実行されます。セッションがアクティブです(ただし、これは良い方法ではありません。サーバー上にはまだたくさんのセッションがあり、役に立たないリクエストがたくさんあります...そしてユーザーがそうしない限り機能します彼のブラウザを閉じます)。

于 2009-08-25T10:28:21.133 に答える
3

PHPの内部セッション処理だけではそれを行うことはできません。PHPは、ユーザーがブラウザを閉じると期限切れになるセッションCookieでセッションIDを常に送信します。ある種の自動ログインを実現するには、ユーザーのブラウザに長持ちするCookieを設定し、これらのCookieの認識と、Cookieの値とそれぞれのユーザーアカウント間のマッピングを処理する付随するコードが必要になります。

これはセキュリティの問題に大きく影響するため、多くのことに注意する必要があることに注意してください。可能な自動ログイン機能がどのように機能するかについては、以下をお読みください。

于 2009-08-25T10:30:01.770 に答える
0

テスト中にCookieを削除しますか?Cookieは有効になっていますか?コードのどこかでセッションを破棄しますか?

また、別の投稿への私の回答を参照してください:サインインを維持する方法を説明するPHPのセッションに関する簡単な質問。ユーザーが永久にログインしたままにしたい場合は、cronjob/sheduledタスクを実行しないでください。

于 2009-08-25T10:29:48.027 に答える