꽤 작은 응용 프로그램을 설정하는 데 문제가 있습니다. 그것은 조금 조사 일 것입니다.PHP : header() + 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;
}
}
I unset($_POST)
과 같이 리디렉션 :
header('Location: index.php?action=survey_part2');
exit;
문제점 : 리디렉션 후 이전에 저장된 로그인 데이터는 여전히 $_SESSION
이지만,입니다. 0은 그렇지 않습니다. 리디렉션을 피하면 리디렉션이 시작되기 전에 이 $_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 ('Location : index.php? action = survey_part2'); 그리고하지 말아라 ($ _ POST); –
첫 번째 사항은 사실이다. 이미 내 코드에서 괜찮 았어. unset ($ _ POST)을 사용했는지 여부는 영향을 미치지 않습니다. – BairDev
''index.php? action = survey_part2'' 페이지에서'session_start();'가 호출되고 있습니까? 또한, "컨트롤러"의 끝에서'redirect ('index.php? aktion = umfrage_2 & lang = de'); - 헤더 ('Location : index.php? action = survey_part2')가되어서는 안됩니다. ; ' – Shackrock