$ _SESSION存储无法直接分配数组

时间:2013-06-10 07:39:37

标签: session php

今天我来到了非常奇怪的境地。 我试图将$_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()作为第一行中的第一行。

为什么会这样?哪里错了?我想不出来。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

您必须在这两个文件之上加session_start();。如果没有调用该函数,则$_SESSION[]只是另一个数组,而不是SESSION超级全局,因此您无法在2页之间共享它。