我在设置一个非常小的应用程序时遇到了一些麻烦。这将是一个小调查。
表格分为两页。提交第一个后,数据存储在$_SESSION
数组中:
save_items(array('my_data' => $my_data_oject));
该函数save_items()
如下所示:
function save_items(array $array) {
foreach ($array as $name => $item) {
$_SESSION[$name] = $item;
}
}
然后我unset($_POST)
像这样重定向:
header('Location: index.php?action=survey_part2');
exit;
我的问题是:重定向后,之前存储的登录数据仍在$_SESSION
,但my_data_object
不是。如果我避免重定向,我可以看到它在重定向开始之前my_data_object
存储在$_SESSION
数组中。因此 和 的组合header()
似乎exit
部分地破坏了会话。有谁知道这怎么会发生?
最后,我的控制器的一部分:
<?php
error_reporting(E_ALL);
session_start();
require_once 'models/functions.php';
require_once 'models/classes.php';
$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : NULL;
$view = $action;
$language = isset($_REQUEST['lang']) ? $_REQUEST['lang'] : 'de';
switch ($action) {
case 'login' :
if ((!empty($_POST['email'])) && (!empty($_POST['password']))) {
$user = new User();
$login = $user->find_user($_POST);
if (!empty($login)) {
set_message('Welcome ' . $login['Firstname'] . ' ' . $login['Lastname'] . '!');
save_items(array('user_id' => $login['CID']));
unset($_POST);
redirect("index.php?action=survey&lang=de"); //<- works fine. Login is kept, Message is kept.
} else {
set_message('Please try again.');
unset($_POST);
}
} else {
unset($_POST);
set_message('Try again.');
}
break;
/* ... shortage */
case 'survey' :
check_login(); //<- doesn't matter
if (empty($_POST)) {
/* ... shortage */
} else {
/* ... creation of my_data_object + setting one more message */
save_items(array('my_data' => $my_data_object));
unset($_POST);
save_items(array('test' => 'you see me?')); //<- index.php?action=survey_2 won't get it
//var_dump($_SESSION);
header('Location: index.php?action=survey_2&lang=de'); //<- does not work. Login is kept in $_SESSION, but not my_data
exit;
}
break;
谢谢!
这个话题可能和这里的那个差不多,但是我$_SESSION
的后面不是空的header()
,而是被部分删除了。