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;
}

当我跳到第二页时它工作正常。并维护会话数据。我已经把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 回答