3

アプリケーションを別のサーバーに転送していますが、PHP セッションに問題があり、有効期限が切れないようです。

私が設定したphp.iniで:

session.gc_probability = 1
session.gc_divisor = 1
session.gc_maxlifetime = 300

もちろん、Cookieは有効になっています。それでも、5 分後にページを更新してもログインしたままです。ブラウザを閉じてページを再度開いても。編集:実際には、ブラウザを閉じるとセッションがクリアされるようです。

すべてのリクエストは最初に特定のスクリプトを通過するため ( ) RewriteRule / begin.php、私は非常に幸運で、これで問題を解決できました。

session_start();
if (time() > @$_SESSION['sessionLimit']) {
    session_destroy();
    session_start();
}
$_SESSION['sessionLimit'] = time() + ini_get('session.gc_maxlifetime');

しかし、それでも、私が間違っていることと、古いサーバーですべてがうまくいった理由がわかりません( session.gc_divisor10に設定されていたとしても)。

古いサーバー: Windows Server 2003、Apache 2.4、PHP 5.4.5、すべて 32 ビット

新しいサーバー: Windows Server 2008 R2、Apache 2.4、PHP 5.5.4、すべて 64 ビット

4

2 に答える 2

2

この回答を参照してください: 30 分後に PHP セッションを期限切れにするにはどうすればよいですか?

ガンボは私よりもうまく説明してくれます。

特に、Gumbo は が信頼できない理由session.gc_maxlifetimeを説明しており、セッション タイムアウトを自分で実装することを推奨しています。最後のアクティビティ (つまり、リクエスト) の時間を示す単純なタイムスタンプを使用し、リクエストごとにそのタイムスタンプを更新します。
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

于 2014-04-06T17:59:24.750 に答える