私はかなり大きな PHP アプリ (数千の一意の URL、さまざまな役割を持つユーザー ログインなど) を持っています。PHP では、php.ini でセッション タイムアウトが 1 時間 (3600 秒) に設定されています。ログインのしくみは次のとおりです。ユーザーがアプリに正常にログインすると、ユーザー名、本名、ロール ID など、ユーザーに関するいくつかの情報が $_SESSION に保存されます。すべてのページ アクセス (共通コード) で、$これらの変数について _SESSION がチェックされ、それらが存在する場合、ユーザーは要求された場所に移動します。変数が存在しない場合、ユーザーは「ログインしていない」ページにリダイレクトされます。
これは過去数年間正常に機能しており、現在も正常に機能しています-ほとんど. 非常にランダムに、セッションが警告などなしにタイムアウトしたように見えます。ログインしているユーザーの場合、これは次のように表示されます。ログインして何かを行い、次のページに移動し、代わりにログアウトして「ログインしていない」ページに戻ります。当然、これは非常に迷惑です。ただし、この動作のランダムな性質により、調査が非常に困難になります。
どのブラウザーでも、自分のマシンでそれを経験したことはありません。オフィスには別のマシンがあり、すべてのブラウザーで常にこれが発生します (少なくとも、問題を再現できます)。さらに別のマシンでは、あるブラウザーで発生し、別のブラウザーでは発生しません。それでも、別のマシンでは、時々発生し、他の時間には発生しません。今日、この問題が発生したクライアントの 1 人から電話がありましたが、別のブラウザーで試すように要求されたところ、問題なく動作しました。
これはブラウザのバージョンによるものではありません。同じバージョンのマシンでは動作し、他のマシンでは動作しないためです。さらに、同じように設定された 2 台のマシンがあると、1 台では発生することがありますが、別のマシンではまったく発生しません。全体として、セッションで非常に奇妙なことが起こっているように見えますが、どこを見ればいいのか完全に困惑しています。私は過去数か月間、これを調査しようとしてきましたが、どこにも行きませんでした. 他にどこを見る?
この時点で、どんな助けも大歓迎です。
追加:ここに私の php.ini のセッション部分があります:
[Session]
session.save_handler = files
session.use_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_divisor = 100
session.gc_maxlifetime = 3600
session.bug_compat_42 = 1
session.bug_compat_warn = 1
session.referer_check =
session.entropy_length = 0
session.entropy_file =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 4