web-dev-qa-db-ja.com

ユーザーセッションをリセットせずにApacheを再起動する方法は?

ユーザーはPHP Webサイトにログインしています> Apacheを再起動します>ユーザーは再度ログインする必要があります。

これを防ぐ方法は? (ユーザーが再度ログインする必要はありません)

8
dowik

バックアップとして別の場所にセッショントークンを保存すると、この問題を防ぐことができます。 $_SESSIONにメイン情報を保持できますが、バックアップトークンは次の場所に保持できます。

  • クッキー
  • データベースレコード
  • HTML5ローカルストレージ

このStackOverflowの質問には、いくつかのヘルプがあります。 phpでのセッションタイムアウトと永続的なログインのベストプラクティス

6
Jacob Hume

セッションデータがメモリに保存されており、ディスクにバックアップされていない (ファイルシステムまたはデータベースによる)でない限り、Apacheがシャットダウンまたは再起動されたからといって、セッションデータが失われるべきではありません。それ以外の場合は、サーバー全体を再起動してもセッションは維持されます。セッションデータは、長期間保存されるように設計されています。セッションが失われるのは、次の場合のみです。

  1. SIDは失われます。セッションデータはまだサーバー側に存在しますが、クライアントはSIDを回復できないため、同じセッションを再開できません。これは、SID Cookieの有効期限が切れた場合(Cookieの場合)、セッションリンクが失われた場合(SIDがURLパラメーターの場合)、またはSIDがサーバー側で設定されていないか、クライアントに通知せずに変更された場合に発生します。

  2. セッションデータはサーバー側で削除されます。通常、これはPHP Session Garbage Collectorが実行され、セッションファイルが session.gc_maxlifetime (デフォルトでは24分)よりも古い場合に発生します。そうでない場合、アプリケーションが明示的に セッションを削除 した場合に発生する可能性があります。一部のサーバーでは、管理者がcronjobを構成して、古いセッションデータを定期的に消去することもできます。

3
Lèse majesté

Apacheで正しい引数を使用することで可能になりました。

Apache2ctl -k graceful

Apacheは現在のセッションを失うことなく再起動します。

1
dowik