У меня возникли проблемы с настройкой довольно небольшого приложения. Это будет небольшой опрос.PHP: СЕССИЯ частично удалена после заголовка() + exit
Форма разбита на две части. После подачи первого, данные хранятся в $_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;
Спасибо!
Эта тема может быть похожа на that one here, но мой $_SESSION
не пуст после header()
, но частично удален.
его 'header ('Location: index.php? Action = survey_part2');' и dont 'unset ($ _ POST);' –
Первое, что верно, я исправил его. В моем коде было уже хорошо. Использование unset ($ _ POST) или нет не оказывает никакого влияния. – BairDev
Является 'session_start();' вызывается на вашей странице 'index.php? Action = survey_part2'? Кроме того, в конце вашего «контроллера» у вас есть «redirect» («index.php? Aktion = umfrage_2 & lang = de»); '- не должно быть' header ('Location: index.php? Action = survey_part2') ; ' – Shackrock