ホームページ  >  記事  >  バックエンド開発  >  PHPのセッションブロック問題の解決策

PHPのセッションブロック問題の解決策

黄舟
黄舟オリジナル
2017-08-08 09:41:241418ブラウズ

この記事では、PHP プログラミングにおけるセッション ブロックの問題と解決策を主に紹介し、PHP セッション ブロックの原理、理由、簡単な解決策を簡単に分析します。必要な方は参考にしてください。

この記事では、PHP プログラミングにおけるセッションについて説明します。 . ブロックの問題と解決策。参考のために皆さんと共有してください。詳細は次のとおりです:

セッションの使用中、セッションを開いた後、同じブラウザで同じプログラムを実行すると、異なるページがロックされます。別のブラウザではこのようなことは起こりません。

質問: session_start がブロックの原因ですか?

そこで、いくつかのページを書いてテストしたところ、セッションがブロックの原因となっているのに対し、他の 2 つの状況ではブロックが発生していないことがわかりました。

PHP バグ リストを確認したところ、誰かがこの質問をしたことがわかりました:

説明:
---------------
session_start() の呼び出しは、他のスクリプトが終了するまで待機しているようです

同じセッションを使用しているものは、最初のリクエストが
セッション ファイルを排他的にロックし、2 番目のリクエストが
それを開くことができるまでブロックすると思います。

PHP の公式の返信は次のとおりです:

これはバグではありません。

は、ブロックの原因を見つけるために PHP のセッション メカニズムを組み合わせて、セッション ファイルをロックしています。 PHPのセッション情報はファイルに書き込まれるため、1つのクライアントが1つのセッションファイルを占有します。したがって、session_start が呼び出されると、ファイルはロックされ、読み取り/書き込みモードでロックされます (プログラム内でセッションの値を変更する必要がある場合があるため)。このようにして、session_start への 2 回目の呼び出しはブロックされます。 。

最も簡単な解決策:

PHPマニュアルを確認したところ、session_write_close関数が見つかりました。この関数は、セッションデータの書き込みとセッションの終了、つまり、セッションデータの書き込みとセッションの終了を同時に行います。したがって、セッションの終了後、この関数を呼び出してセッション ファイルを閉じ、ロックを解除できます。一般に、セッションは、PHP が ID 認証を実行できるようにユーザー ID 情報を記録するために使用されます。したがって、セッションの読み取りと書き込みは、実行後すぐに呼び出すことができます。 。

以上がPHPのセッションブロック問題の解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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