1

サーバーに配置した次のスクリプトに問題を減らすことができました。

<?php
session_start();
header('Content-type: text/plain', TRUE);
flush();
sleep(300);?>

次を使用してこのスクリプトに接続すると:

GET /test.php HTTP/1.1
Host: localhost

期待どおり、すぐにヘッダーを取得します。

HTTP/1.1 200 OK
Date: Sat, 03 Nov 2012 20:15:53 GMT
Server: Apache/2.2.22 (Fedora)
X-Powered-By: PHP/5.3.17
Set-Cookie: ZDEDebuggerPresent=php,phtml,php3; path=/
Set-Cookie: PHPSESSID=m7bmvblakkil96rqjq7j8f0f42; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Connection: close
Transfer-Encoding: chunked
Content-Type: text/plain; charset=UTF-8

その後、接続を強制終了し、次を使用して再接続した場合:

GET /proxy/test.php HTTP/1.1                
Host: localhost
Cookie: PHPSESSID=knkeaq2ao0cllpcci0rnassqj4

ウェブサーバーを再起動するまで、ヘッダーが返されません。すぐに応答ヘッダーを再度取得することを期待していました。なぜこのような振る舞いをするのか、私にはまったくわかりません。多分それはある種のバグですか?または、いくつかの動作を誤解しています。何が起こっているのか本当にわからないので、誰かがこれで私を助けてくれれば素晴らしいと思います。

Ps: 私は、fedora 17 で PHP 5.3.17 を使用して Apache/2.2.22 を実行していますが、サーバー パッケージは、fedora 17 に付属する PHP では動作しない zend デバッガーが必要なため、fedora 16 リポジトリから外れています。

4

1 に答える 1

2

セッションは最初のリクエスト (300 秒間) でまだ開いているため、2 番目のリクエストで使用を開始することはできません。最初のセッションが閉じられてファイルシステムに書き込まれるまで待機してから、2 番目の要求のために読み取りを試みます。最初のリクエストが、2 番目のリクエストですでに使用されている同じセッション変数を変更することを望んでいると確信できないためです。

session_write_close()セッション変数がすぐに利用可能になるように、スリープの前に使用できます。ただし、その後はセッション変数を変更できません。

于 2012-11-03T21:01:32.917 に答える