1

今日、私は非常に奇妙な状況に陥りました。$_POSTにデータを保存しようとしていました$_SESSION。だから最初にやった

$data = $db->FilterParameters($_POST);
// method 1
$_SESSION['default']['car_rental'] = $data;

そのため、ページが読み込まれ、セッション データが適切に保存されます。私がそれらを印刷したとき、それらは大丈夫でした。しかし、他のページに行くとすぐに、それらは破壊されます。それから私は試しました

// method 2
foreach ($data as $k => $v){

    $_SESSION['default']['car_rental'][$k] = $v;
}

2ページ目にジャンプするとうまくいきました。セッションデータは維持されました。私はすでにsession_start()両方のページの最初の行として入れています。

なぜこれが起こったのですか?何が問題だったのですか?私は理解できませんでした。

4

2 に答える 2

1

ポピュレートされている何らかの種類のチェックを行っています$_POSTか? そうでない場合は、最初の方法を使用して、セッション値を空の配列で上書きします。

foreach アプローチは、配列が空で実行されない場合を認識します。つまり、以前に割り当てられた値がセッションに残ります。

何が起こっているかを強調するコードを次に示します。

<?php

session_start();
header("Content-Type: text/plain\r\n");

// method one
$_POST = array('test' => true); // dummy post
$_SESSION['data'] = $_POST; // assign
$_POST = array(); // clear post
$_SESSION['data'] = $_POST; // assign
print_r($_SESSION); // print (gives empty array)

// method two
$_POST = array('test' => true); // dummy post
foreach ($_POST as $k => $v) $_SESSION['data'][$k] = $v; // assign
$_POST = array(); // clear post
foreach ($_POST as $k => $v) $_SESSION['data'][$k] = $v; // assign, does nothing
print_r($_SESSION); // print (gives populated array, foreach doesn't execute)
于 2013-06-10T08:21:55.913 に答える
0

session_start();両方のファイルの上に置く必要があります。その関数が呼び出されない場合、あなた$_SESSION[]は単なる別の配列であり、SESSIONスーパーグローバルではないため、2 つのページ間で共有することはできません。

于 2013-06-10T07:44:26.650 に答える