1

以下は、1 つの .php ファイルの先頭からコピーして貼り付けた小さなコードです。

if (!isset($_SESSION)) { session_start(); }

require_once('rb.php');
require_once('Util.php');

echo("Here is the session: ");
echo(print_r($_SESSION, true));
$isDevel = $_SESSION['isDevel'];
print_r("isDevel is: $isDevel\n");

if (! isset($_SESSION['isDevel'])) {
    die("connections.php: isDevel needs to be set by now!  SESSION: " . 
      print_r($_SESSION, true));
}

実行中の出力は次のとおりです。

Here is the session: Array
(
    [isDevel] => This is a string.
    [configObj] => 
)
isDevel is: This is a string.
connections.php: isDevel needs to be set by now! SESSION: Array ( [isDevel] => This is a string. [configObj] => )

明らかに $_SESSION['isDevel'] が設定されています。そうしないと、出力できません。しかし、issetテストは失敗し、それは定義されていないと主張し、$_SESSION['isDevel']それにもかかわらず、同じ息でそれを印刷します!

ドキュメントを確認しましたが、これをどのように台無しにしているかわかりません。

編集:

JA は、何かがセッションに割り当てられるコードを要求しました。それはこれです(別のファイルから):

if (!isset($_SESSION)) { session_start(); }
$isDevel = 'This is a string.';
$_SESSION['isDevel'] = $isDevel;

Chris は、私が投稿したのと同じコードを実行したとは思わないとコメントしています。違います。おそらく、ここに投稿されたコードだけでなく、さらに多くのことが行われているということでしょうか? もしそうなら、そうですが、コードは複数のファイルに分散しているため、既に持っている以上に圧縮することはできません。

とにかく、はっきりさせてください。上に投稿したコードは、表示されているとおりに、表示されている順序で実行されています。[最初の print_r が表示されないように echo() を省略していることがわかりますが、混乱を避けるために、編集前の問題の説明でこれを修正します。分かりやすくするために省略した 2 つの require_once ターゲットを追加して、コードがそのままコピー アンド ペーストされるようにします。

問題が明白な説明に反するほど微妙であることを証明しているので、人々が私を不正行為だと疑っていることに少なくとも満足しています:)

編集2:

これを報告するのは恥ずかしいことですが、私を助けようと時間を割いてくれた人々のおかげだと感じています. 問題はコピー アンド ペースト エラーでした。私が報告したコードは実際に実行されました。しかし、私が引用したコードは、「isDevel を今すぐ設定する必要があります!」という出力を担当するコードではありませんでした。むしろ、そのメッセージを誤ってカット アンド ペーストし、ペースト先のセマンティクスを反映するようにテキストを編集するのを忘れていました。そのため、コードは実行されていましたが、私が起因する奇妙な動作を示していませんでした。

集合時間を無駄にして申し訳ありません。このバグ検索についてもっと賢くするべきでした。

4

1 に答える 1

1

セッション変数を確認する前に、セッションを開始してください。

session_start();
if(!isset($_SESSION['isDevel'])) {
//code here
}
于 2012-05-30T20:53:22.743 に答える