0

約 35 ~ 40 分後にセッション変数が null になるという問題があります。ただし、セッション ID は引き続き有効 (および以前と同じ番号) として表示されます。

セッション変数を読み取って表示し、秒数の増加後にページをリロードするテスト コードをいくつか作成しました。これは 2400 秒になるまで機能し、その時点で変数は次の表示で null になります。つまり、更新の間に 2400 秒待機すると、常に null になります。.htaccess の session.gc_maxlifetime を 7800 に設定しました (ini_get で 7800 と読み取られるため、明らかに設定されています)。

明らかな何かが欠けているか、深刻な奇妙なことがここで働いています。これは私を夢中にさせています。

これは、WHM を備えた Linux VPS 上にあります。

テスト セッションを作成するコード:

<?php
    // start session
    session_start();

    // set session value
    $_SESSION["session_memberid"] = 1234567;
    $_SESSION["session_refresh"] = 2000;

    // write file, close
    session_write_close();

    // display confirmation
    echo json_encode(array(
        '$_SESSION["session_memberid"]' => $_SESSION["session_memberid"],
        'session_id' => session_id(),
        'maxlifetime' => ini_get('session.gc_maxlifetime')
    ));
?>

セッションを読み取るコード (自動的にリロードされます):

<?php
// start session
session_start();

// get session id
$session_id = session_id();

// get stored memberid
$member_id = $_SESSION['session_memberid'];
$_SESSION['session_memberid'] = $member_id;

// get last activity
$lastactivity = $_SESSION["last_activity"];

// increasing refresh time
$refresh = $_SESSION["session_refresh"];
$_SESSION["session_refresh"] = $refresh + 100;

// update time
$_SESSION["last_activity"] = time();

// write file, close
session_write_close();

...
(code to display and refresh variables)

有効な読み取り時の出力:

{"memberid":1234567,"session_id":"c9d20d4992f184f29b259ef5ccab275f","sessionpath":"\/tmp","maxlifetime":"7800","sessioncookiepath":"\/","sessioncookielifetime":"0","referrer":"","autostart":"0","cache":false,"time":1365004882,"cookie":{"lifetime":0,"path":"\/","domain":"","secure":false,"httponly":false},"refresh":2400}

無効な読み取りが memberid (必要な変数)、時間 (last_activity)、および更新時間を null として示している場合の出力。

何か案は?

4

2 に答える 2

1

apache ユーザーに /tmp ディレクトリへの書き込み権限がなく、セッションがその期間 RAM でのみアクティブである可能性はありますか。RAMから消去されると、デフォルトでファイルに書き込まれますが、アクセス許可のために書き込まれることはありませんか?

于 2013-04-03T17:01:13.970 に答える
0

結局のところ、この問題は、ini_get がオーバーライドされた値を示していても、実行時に .htaccess または ini_set の設定によって php.ini が正しくオーバーライドされていないことでした。理由は明確ではありませんが、php.ini で session.gc_maxlifetime を変更するだけで問題が解決しました。

于 2013-04-05T16:55:58.420 に答える