2

Chrome によると、私のサイトの PHPSESSID Cookie の有効期限は

Expires:    Monday, November 26, 2012 2:46:39 PM

ただし、セッションは数時間後に期限切れになります。各ページで session_start() を呼び出しています。同様の質問に対して提供されたソリューションを読んで、設定してみました

ini_set("session.cache_expire",300*24*60*60);

ini_set("session.gc_maxlifetime",100*24*60*60);

前にsession_start()しかし、これは問題を解決しませんでした。(初期値はそれぞれ 180 と 1440 に設定されています。)

私は共有サーバーを使用していますが、別の提案はデフォルトの tmp ディレクトリを変更してルートではないようにすることでした (ガベージ コレクション プロセスによって Cookie が削除される可能性があります)。

$docroot = $_SERVER['DOCUMENT_ROOT'];
$tmpdir = "$docroot/tmpx";
session_save_path($tmpdir);

これで問題は解決しません。(Chromeだけでなく、他のブラウザでも同じ問題があります。)他に何が間違っているのでしょうか?

更新:現在のセッションのファイルをローカルに保存し、数時間後にログインを試みました。Chrome の PHPSESSID Cookie (つまり、コンテンツがこのセッション ファイルの名前である Cookie) は、予想どおり 100 日先の日付で保存されたままですが、サーバー上の実際のセッション ファイルにはデータが含まれていません。(存在しますが、以前の 192 バイトではなく 0 バイトです。) したがって、セッション ファイルは削除されていないように見えますが、内容は消去されています。

4

2 に答える 2

4

セッション データが正しく処理されない理由は多数考えられます。ほとんどの場合、ロードされてデータを使用するすべてのページでセッションが開始されていません。これを修正するには、呼び出されるかリダイレクトされるすべてのページで session_start() が開始されるようにします。また、セッション構成 (例: ini_set()) を変更する場合は、それがグローバルに、またはすべてのページに適用されていることを確認してください。グローバルに適用するには、追加します

php_flag session.gc_maxlifetime <your value>
php_flag session.cache_expire <your value>

.htaccess ファイルに。または、追加することもできます

ini_set("session.gc_maxlifetime", <value>);
ini_set("session.cache_expire", <value>);

session_start() を呼び出すすべてのページの session_start() の直前。

于 2012-08-24T01:31:01.973 に答える
-1

これを前に追加しますsession_start()

ini_set('session.use_cookies', 1);
ini_set('session.cookie_lifetime', 300*24*60*60);

ファイルベースのセッションは、さまざまな理由でシステム上で中断される場合があります。データベースベースのセッションを使用してみて、問題が解決するかどうかを確認してください。

于 2012-08-18T20:28:16.777 に答える