3

私はこの問題がここSOで提示されていることを知っており、解決策を試しましたが、まだ修正されていません。

PHPは、しばらく非アクティブになった後、セッションを削除します(これはデフォルトであり、テストに適合しているように見えるため、24分と想定しています)。

すべてのページに次のコードを設定しています。

ini_set('display_errors', 0);
$sessionCookieExpireTime = 2880000;
session_set_cookie_params($sessionCookieExpireTime);
ini_set('session.gc_maxlifetime', $sessionCookieExpireTime);

session_start();
echo ini_get('session.gc_maxlifetime'); //echos 2880000 as expected

ただし、非アクティブ状態が24分(またはそれ以上)続いた後でも、セッションはリセットされます。

phpinfo()は、セッションに対して次の出力を返します。 ここに画像の説明を入力してください

これが機能しない理由はありますか?(PHP 5.3.10)

ありがとう

4

2 に答える 2

5

Marc B answer はいくつかの素晴らしい洞察を共有していますが、それは私にとってはうまくいきませんでした。私は自分のスクリプトですべてがうまくいっていると確信しており、自分のコードでセッションを台無しにすることは何もありませんでした.

壮大な闘争の後、私の問題は実際には共有ホスティング環境が原因であることがわかりました. PHPドキュメントから:

「異なるスクリプトが…セッションデータを保存するために同じ場所を共有している場合、最小値を持つスクリプトが[セッションタイムアウトを決定します]」.

この後、問題は非常に明白になりました。一部のスクリプト (同じサーバーでホストされている) がデフォルトの php.ini session.gc_maxlifetime を使用していたため、セッションがリセットされていました。

解決策は、ホスティングのルートの下にフォルダーを作成し (Web アクセスできないことを確認してください)、適切なアクセス許可を設定し、session.save_path を使用して、セッションを保存する場所を php に指示することでした。何かのようなもの:

ini_set("session.gc_maxlifetime","21600"); // 6 hours
ini_set("session.save_path", "/your_home/your_sessions/");
session_start();

このウェブサイトは素晴らしい洞察を提供しました:共有ホスティングに関するphpセッション

したがって、この問題に遭遇した場合は、Marc B の推奨事項に従っていることを確認し、それがうまくいかない場合はこれを試してください。

幸運をお祈りしています!!

于 2012-09-06T02:14:09.630 に答える
3

セッションを使用するすべてのスクリプトでこのコードを実行していますか?ini_setの変更は、それらが実行されたスクリプトにのみ適用され、その特定のスクリプトの実行期間にのみ適用されます。

永続的なグローバル変更を行う場合は、php.iniを変更するか、いくつかのphp_valuesディレクティブをhttp.conf/.htaccessに配置する必要があります。

于 2012-09-03T16:49:20.767 に答える