この記事では、PHP session_start() が非常に遅い問題の分析と解決策を紹介します。この問題に遭遇した学生はそれを参照してください。
最近何かを作っているときに問題を発見しました
1 つのインターフェイスがダウンしており、アクセス アドレスをテストする際、ブラウザは常に応答を待っています
どのようにアクセスしても、Webサーバーを再起動することしかできません。
コードのデバッグのために Web サーバーを再起動しないと、session_start() 中に続行できないことが常にわかります
問題の原因がついに理解されました:
セッションはサーバー側に保存されるため、ブラウザーによって送信されたリクエストは、リクエストを処理するために Web サーバーにスレッドを確立します
ブラウザが応答を待っているという事実は、Web サーバーがリクエストを処理していることを示していますが、応答のタイムアウトが非常に長いため、次回はデバッグが必要になる可能性があります。
前のリクエストが終了する前にセッション リソースを占有しているため、再度リクエストすると、セッション リソースが取得されるまで常に待機することになります。
つまり、最後のリクエストが終了したときにのみ、セッションリソースを正常に取得してコード分析に入ることができます
以前は、PHP ページで session_start() メソッドを呼び出すのが非常に遅く、数十秒かかることもありましたが、今回、その理由がついにわかりました。
解決策
セッションはファイルを使用するため、複数のリクエストが行われるとセッション ファイルはロックされます。セッションが使用されていないときは、できるだけ早くセッションを解放するようにしてください。
session_write_close() メソッドを使用します
コードをコピー | |
session_start(); //セッションを開始します
$_SESSION['user']="私"; |