0

PHP とセッションで非常に奇妙な動作が発生しています。

私が使用しているスクリプトは何ヶ月も動作しており、さまざまな PHP バージョンのさまざまなサーバーで動作しています。

スクリプトは URL を読み取り、URL に応じて再ルーティングします。たとえば、/offer/abc1234.html を押すと、クラス offer が呼び出され、abc1234 がパラメーターとして渡されます。

「フェイルオーバー」クラスを作成しました。つまり、/abc1234.html と記述すると、さまざまなデータベース エントリがテストされ、見つかった場合は、URL によって呼び出された場合のように、そのクラスが自動的に含まれます。違いは次のとおりです。

  • /offer/abc1234.html :: index.php -> offer.php -> home.php
  • abc1234.html :: index.php -> error.php -> failover.php -> offer.php -> home.php

さて、これがすべて機能し、何ヶ月も機能していることを考えると、私の問題はセッションにあります。

/offer/abc1234.html をクリックすると、セッションが設定され、Cookie がブラウザに送信されます。

/abc1234.html をヒットすると、セッションは正しく設定され、エラー (E_STRICT+E_ALL) も警告も何も発生しませんが、Cookie はブラウザーに送信されません。スクリプトの最後に $_SESSION を出力しようとしましたが、セッションが読み込まれ、ヘッダーを除くすべての変数が正しいです。

私はそれをデバッグし、さまざまな場所にさまざまな var_dump を追加しようとしましたが、header_list() に session_cookie が含まれていないことを除いて、どこにも違いはありませんが、手動で設定した他の Cookie が含まれています。

私は現在印刷しています:

  • セッション名()
  • session_id() - これは更新ごとに変更されますが、ページ全体で一貫しています
  • session_get_cookie_params()
  • headers_list() - これには、session_start が持つべき set-cookie ヘッダーが含まれていません

出力は次のようになります。

  • 文字列(6) "QSCSID"
  • 文字列(26) "456disv3pl4u2j81dej6h6d717"
  • array(5) { ["lifetime"]=> int(0) ["path"]=> string(1) "/" ["domain"]=> string(0) "" ["secure"]=> bool(false) ["httponly"]=> bool(false) }
  • array(4) { [0]=> string(38) "有効期限: 1981 年 11 月 19 日木曜日 08:52:00 GMT" [1]=> string(77) "Cache-Control: no-store、no-cache 、再検証が必要、チェック後=0、チェック前=0" [2]=> string(16) "プラグマ: キャッシュなし" [3]=> string(68) "Set-Cookie: spi=17468 ; expires=Sat, 26-Oct-2013 05:02:23 GMT; path=/" }

繰り返しますが、すべてがその日の早い段階で機能していたので、私は気が狂いました。その後、Apacheを再起動しましたが、機能しなくなりました。

サーバーを確認しましたが、フォルダーはいっぱいではなく、書き込み可能であり、abcd1234.html を呼び出すとファイルが作成されて空になります

編集
中に編集し、サーバー上で直接「ee」(FreeBSDエディター)を介してファイルを開き始めます。クラスを開く/保存するまで何も起こらず、ファイルに変更は加えられず、誤ってスペースを追加して削除し、エディターを終了すると保存するように求められ、はいと言った。

PHP は eaccelerator でコンパイルされています。既にキャッシュ フォルダーを削除し、Apache を再起動して、フォルダーが自動入力されるのを見ました。このようなクラス (failover.php) は単純な 4 つの関数であり、各関数はクエリであり、構成体は各関数を一度に 1 つずつ呼び出します。

それで、それはうまくいっているようですが、誰かがこのようなことを経験したことがあるかどうか、そして彼らが問題が何であるかを知っていたかどうかを知りたいです

4

1 に答える 1

0

FreeBSDでファイルを開いて「ee」で閉じると、すべてが機能しました。

于 2012-12-13T23:09:02.190 に答える