4

Kohana 3.2 セッションの有効期限が早すぎます。私の現在の設定は次のとおりです。

return array(
'native' => array(
    'name' => 'kohanasession',
    'lifetime' => 0,       
 ),
);

を使用lifetime => 0すると、ブラウザを閉じるとセッションが終了します。ただし、1 時間後にセッションは期限切れになります。

また、別の有効期間 (たとえば、36000 => 10 時間) を使用しようとしましたが、やはり失敗しました。

小さなセッション ライフ (たとえば 10 秒) を使用すると、有効期限は完全に機能します。私が確認した限りでは、セッションの有効期間を 1 時間より長くしたい場合、それは機能しないようです。

最後に、php.ini に使用する関連構成

session.save_handler = memcache
session.save_path="tcp://127.0.0.1:11211?persistent=1&weight=1&timeout=1&retry_interval=15"
session.cache_limiter = nocache
session.gc_probability = 0

私はここで本当に迷っています。これは簡単に修正できるはずですが、うまくいきません。

4

1 に答える 1

5

このlifetime => 0パラメーターは、セッション Cookie の有効期間にのみ影響を与える可能性があります。

おそらく起こっていることは、Cookie が正常に機能している間に、サーバー側でユーザーのセッション データを破棄しているということです。PHP には、デフォルトで少し変わったセッション ガベージ コレクションがあります。アイドル時間が 24 分間続くとセッションを期限切れとしてマークし、リクエストごとに 1% の確率で期限切れのすべてのセッションをクリーンアップします。

PHP の ini 設定を増やすsession.gc_maxlifetimeか、session.gc_probability0 に設定して自動セッション ガベージ コレクションを完全に無効にすることができます。

もちろん、memcached サーバーが一定期間後にデータを破棄するように構成されている可能性もあります。

更新:平均的なセッション ハンドラーの場合、session.gc_probabilityゼロに設定すると、自動クリーンアップが完全に無効になります。ただし、実際には、memcache セッション ハンドラはすでにガベージ コレクションを行っていません (その gc コールバックは何もしません)。そのため、その保存ハンドラでは、session.gc_probabilityまたはのいずれかを変更しても意味がありません。session.gc_divisor

代わりに、memcache 保存ハンドラーは、セッション データを memcached サーバーに保存するときに有効期限を自動的に設定します ( Memcache::set のexpireパラメーター)。ハンドラーは、使用する有効期限をsession.gc_maxlifetime設定から読み取ります。したがって、 memcache セッション保存ハンドラーを使用ているときに本当に重要な GC 設定はこれだけです。

于 2012-05-25T05:23:04.997 に答える