session.cookie_lifetimeが23日に設定されているのはなぜですか?[閉まっている]


9

私が理解している限り、Drupalでのセッションの存続時間session.gc_maxlifetimeは、デフォルトで約2.3日に設定されています。

それではsession.cookie_lifetime、23日に設定されていることの用途は何ですか?

以下は、settings.phpのスニペットです。

/**
 * Set session lifetime (in seconds), i.e. the time from the user's last visit
 * to the active session may be deleted by the session garbage collector. When
 * a session is deleted, authenticated users are logged out, and the contents
 * of the user's $_SESSION variable is discarded.
 */
ini_set('session.gc_maxlifetime', 200000);

/**
 * Set session cookie lifetime (in seconds), i.e. the time from the session is
 * created to the cookie expires, i.e. when the browser is expected to discard
 * the cookie. The value 0 means "until the browser is closed".
 */
ini_set('session.cookie_lifetime', 2000000);

この質問のために、私は両方session.gc_probabilityと1を設定したと仮定してくださいsession.gc_divisor


クッキーが不思議に消えてほしくないので?セッションを適切に無効にできるように、そこに配置したいですか?これは実際に問題を引き起こしていますか?
Mołot

それで終わりです。しかし、Cookieをたとえば40時間で失効させ、サーバーセッションを51時間で失効させる方がよいのではないでしょうか。つまり、Cookieの有効期間はサーバーの有効期限よりも短くなります。
user5858 2014

これは主に意見に基づくものであり、PHPの作者だけが実際に言えることです。ああ、それはあなたが使うことに決めたセッションハンドラーに依存します。しかし、通常はありません。Cookieが見つからないために、誰も使用せずにさらにX時間アクティブで使用可能であるはずのセッションは必要ありません。それはストレージの無駄です。Cookieを長く残すと、ほとんどの場合、サーバーに保持されているセッションデータを使用できるユーザーがいるため、セッションデータが保持されないことは無駄です。
Mołot

回答:


16

ini_set( 'session.gc_maxlifetime'、200000);

  1. この値はサーバー用です。
  2. セッションガベージコレクションの設定です。
  3. ユーザーの最後のアクセスが200000秒より前に発生した場合、このセッションはガベージコレクションの対象になります。
  4. これはGCであるため、セッション値は破棄され、必須ではありません。セッションがGCに適格になった後にGCアクションが発生した場合、そのアクションは削除されます。
ini_set('session.cookie_lifetime', 2000000);
  1. この値はブラウザ用です。

  2. これは、ブラウザがこのCookieをアクティブに保つことができるまでの絶対最大時間です。

  3. ここでの0の値は、即時またはブラウザーが閉じたときを意味します。

特にあなたの質問に答えるため。

  1. 2.3日以内にユーザーがサーバーにアクセスしない場合、セッションガベージコレクションの実行時にユーザーのセッションは削除されます。
  2. 2.2(2.3日未満)ごとにサーバーの1ページにアクセスし続けると、セッションはアクティブのままになります。ただし、セッションが最初に生成されてから23日までしかアクティブにできません。
  3. つまり、それはsession.cookie_lifetimeセッションの絶対最大寿命です。

1
確率的ガベージコレクターに注意してください。詳細:stackoverflow.com/a/1270960
digitgopher

すばらしい答えです。サーバーでアクセスできる場合は、php.iniで/etc/php/5.6/fpm/php.ini調整(または追加)設定を行うこともできます。 session.gc_maxlifetime = 2000000。ありがとうございました。
therobyouknow
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.