今天我来到了非常奇怪的境地。
我试图将$_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()
作为第一行中的第一行。
为什么会这样?哪里错了?我想不出来。
答案 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页之间共享它。