ホームページ  >  記事  >  バックエンド開発  >  PHPセッションが機能しない場合の対処方法

PHPセッションが機能しない場合の対処方法

藏色散人
藏色散人オリジナル
2020-08-22 09:17:322788ブラウズ

php セッションが機能しない問題の解決策: まず、ページの先頭で「session_save_path()」関数を呼び出し、次にセッションが保存されているディレクトリを専用のディレクトリに指定します。

PHPセッションが機能しない場合の対処方法

# 推奨事項: 「

PHP ビデオ チュートリアル

php セッション失敗の原因

最近、会社のプロジェクトでプログラム実行後、数分以内にセッションが失敗するという問題が発生しました。その後ネットでずっと読んで仕組みを理解しましたが、Session は Lunix のパブリックパスに保存されているため問題が発生し、プログラム内に Session アプリケーションが多数存在すると相互に影響を及ぼします。

その後、session.gc_maxlifetime を変更しようとしましたが、このパラメータは基本的に機能しないことがわかりました。デフォルトでは、PHP のセッション情報はテキスト ファイルの形式でシステムの一時ファイル ディレクトリに保存されます。このパスは、構成パラメータ session.save_path によって指定されます。 Linux では、このパスは通常 \tmp であり、Windows では通常 C:\Windows\Temp です。サーバー上に複数の PHP アプリケーションがある場合、それらは同じディレクトリにセッション ファイルを保存します (同じ session.save_path パラメータを使用するため)。同様に、これらの PHP アプリケーションも一定の確率で GC を開始し、すべてのセッション ファイルをスキャンします。

問題は、GC が動作しているときに、異なるサイト上のセッションが区別されないことです。たとえば、サイト A の gc_maxlifetime は 2 時間に設定され、サイト B の gc_maxlifetime はデフォルトの 24 分に設定されます。サイト B の GC が開始されると、パブリック一時ファイル ディレクトリがスキャンされ、サイト A からのものかサイト B からのものかに関係なく、24 分より古いすべてのセッション ファイルが削除されます。このように、サイト A の gc_maxlifetime 設定は役に立ちません。

具体的な操作としては、各プロジェクトに独自のセッション パスがあるため、問題を見つけて解決するのは非常に簡単です。ページの先頭で session_save_path() 関数を呼び出します。これにより、session.save_path パラメータが変更され、セッションが保存されるディレクトリが \tmp\myapp\ などの専用ディレクトリに指定されます。このようにして、gc_maxlifetime パラメータは正常に機能します。

特定のコード:

session_start();
ini_set('session.save_path','/tmp/');
//6个钟头
ini_set('session.gc_maxlifetime',21600);
//保存一天
$lifeTime = 24 * 3600;
setcookie(session_name(), session_id(), time() + $lifeTime, "/");

以上がPHPセッションが機能しない場合の対処方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。