4

昨夜ログインし、翌朝ブラウザを終了してもログインしたままでした。数時間後にセッションを期限切れにしたいのですが、「session.gc_maxlifetime」を「1440」に設定し、「session.cache_expire」を「180」に設定するとうまくいくと思いました

PHP.iniから見つけたものは次のとおりです

Session Support                 enabled
Registered save handlers        files user
Registered serializer handlers  php php_binary wddx


session.auto_start        Off
session.bug_compat_42     Off
session.bug_compat_warn   Off
session.cache_expire      180
session.cache_limiter     nocache
session.cookie_domain     no value
session.cookie_httponly   Off
session.cookie_lifetime   0
session.cookie_path       /
session.cookie_secure     Off
session.entropy_file      no value
session.entropy_length    0
session.gc_divisor        1000
session.gc_maxlifetime    1440
session.gc_probability    0
session.hash_bits_per_character  5
session.hash_function     0
session.name              PHPSESSID
session.referer_check     no value
session.save_handler      files
session.save_path         /var/lib/php5
session.serialize_handler php
session.use_cookies       On
session.use_only_cookies  On
session.use_trans_sid     0

古いサーバーでは同じ設定を使用し、セッションは機能しました。古いものとの唯一の違いは、古いサーバーで「memcache」に設定されている「session.save_handler」です。また、「session.save_path」も異なります。

4

3 に答える 3

9

他のものに頼って、それらが機能することを期待するのは私のことではありません。:DI 最善の解決策は、自分でセッション タイムアウトを実装することだと思います。最後のアクティビティ (リクエストなど) の時間を示す単純なタイム スタンプを使用し、リクエストごとに更新します。

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) {
    // last request was more than 30 minutes ago
    session_unset();     // unset $_SESSION variable for the run-time 
    session_destroy();   // destroy session data in storage
}
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp

要求ごとにセッション データを更新すると、セッション ファイルの変更日も変更されるため、セッションがガベージ コレクターによって時期尚早に削除されることはありません。

〜フーラック

于 2013-09-15T08:25:09.050 に答える
2

gc_probablity0 以外に変更すると役立つ場合があります。

のマニュアルからgc_divisor

session.gc_divisor と session.gc_probability を組み合わせると、セッションの初期化ごとに gc (ガベージ コレクション) プロセスが開始される確率が定義されます。確率は gc_probability/gc_divisor を使用して計算されます。たとえば、1/100 は、リクエストごとに GC プロセスが開始される可能性が 1% であることを意味します。session.gc_divisor のデフォルトは 100 です。

gc_probability が 0 の場合、この権利から読んでいる場合、ガベージ コレクターは決して実行されず、gc_maxlifetime は役に立たなくなります。

GC はファイルベースのセッションでは高価なプロセスであるため、リクエストごとに実行するのは得策ではありません [編集: PHP には、定期的に実行するランダム化が組み込まれています]

補遺:実際のセキュリティへの影響があるものについては、Max の回答が示唆するように、スクリプトでセッションの無効化を処理する方がよいでしょう。またsession.cache_expire、ブラウザに送信されるセッション ページのデフォルトの有効期限を設定し、セッション ストレージにはまったく影響しません。

于 2013-09-15T08:25:47.590 に答える