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


8

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

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


確認するには、PHPを編集できます。
Peter Taylor

それがあなた自身のアプリケーションである場合、以下の@Jacob Humeが提案したことを提案し、データベーステーブルにセッションを格納するようにアプリケーションを変更します。これにより、必要に応じてユーザーが選択的にログアウトするように強制できるため、サイトをより詳細に制御できます。
Anagio

PHPを編集できます。CMS(Drupal)を使用しています。私もAPCを使用しており、この方法で解決策を探していました。
dowik

回答:


6

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

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

このStackOverflowの質問でいくつかの助けが見つかるかもしれません。php でのセッションタイムアウトと永続的ログインのベストプラクティス


回答をありがとう、リンクをありがとう。サーバー側の構成ファイル(「再起動後もセッションを維持する」のようなもの)の解決策を探していました。しかし、解決策はアプリ側にあるようです。
dowik

ああ...実際、私は単に「apache2ctl -k graceful」を探していました!
dowik

3

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

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

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


詳細をありがとうございます。私はこの方法を調査します。しかし、今は、自分のニーズに合っていると思われるグレースフルリスタートを使用します。
dowik

@dowik:グレースフルリスタートはどのようにニーズに適合しますか?あなたの問題はセッションを失ったり、ダウンロードを中断したりしていますか?後者の場合、グレースフルリスタート/シャットダウンは実際にそれを解決します。しかし、それを反映するように質問を編集する必要があります。グレースフルリスタートはPHPセッションとは何の関係もなく、セッションが失われるのを防ごうとする他のユーザーの助けにはならないからです。
Lèseはmajesté

私の質問の本文で説明されているように、「PHPセッション」を「ユーザーセッション」に置き換えることで、質問のタイトルを更新しようとしています。あなたにとって良い?より正確には、私はAPCを使用しています。PHPファイルのコードを変更するとき、APCキャッシュをフラッシュする必要があります(Apacheを再起動するのが私が知っている最も簡単な方法です)。"restart"引数を使用すると、私のWebサイトのユーザーは再度ログインする必要があります。「優雅」である間、彼らはしません。それが「それが私のニーズに合っているように見える」理由です。
dowik

@dowik:グレースフルリスタートとは関係ないと思います。PHPセッションのガベージコレクターと同時に発生した再起動が発生した可能性があります。再度ログインして、その後すぐに定期的に再起動してください。セッションをメモリ(MM)に保存しない限り、セッションは保存されます。
Lèseはmajesté

1

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

apache2ctl -k graceful

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


2
グレースフルリスタートは、現在の接続が終了するまでシャットダウンを延期するだけです。再起動の動作は変更されません。
Lèseはmajesté
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.