|
|
|
| Здравствуйте. Помогите разобраться, пожалуйста:
$x = array();
$x['one'] = 'value';
echo $x['one'];
unset($x['one']);
|
В результате получим вывод строки "value".
$_SESSION['one'] = 'value';
echo $_SESSION['one'];
unset($_SESSION['one']);
|
В результате ничего не будет выведено. Почему? Почему значение сессии удаляется до того, как выводиться? | |
|
|
|
|
|
|
|
для: G-Style
(25.04.2011 в 12:58)
| | Вообще-то выводится, в скрипте помимо этих строк еще что-то есть? | |
|
|
|
|
|
|
|
для: cheops
(25.04.2011 в 13:11)
| | Уточню, что инициализация сессийной переменной происходит в другом скрипте, который после перенаправляет (header) на страницу, где надо вывести сообщение об успешном завершении операции. И вот так происходит, а если пробовать в одном скрипте, то все работает нормально... | |
|
|
|
|
|
|
|
для: G-Style
(25.04.2011 в 13:17)
| | Вызов функции session_start() осуществляете в обоих скриптах? | |
|
|
|
|
|
|
|
для: cheops
(25.04.2011 в 13:18)
| | Да, конечно. Если я ее не удаляю после вывода, то она выводиться отлично, но если после я пишу unset то, все — переменная не выводиться. | |
|
|
|
|
|
|
|
для: cheops
(25.04.2011 в 13:18)
| | Для наглядности приведу код:
Файл one.php
if( count($error) == 0 ){
$query_str = sprintf('UPDATE users SET password = "%s" WHERE id = %d', $password, $_SESSION['user']['id']);
$mysqli->query($query_str);
$_SESSION['done'] = 'Пароль успешно обновлен';
header('Location: index.php?cp_plugin=main');
}
|
Файл two.php
if( isset($_SESSION['done']) ){
$message = $_SESSION['done'];
unset($_SESSION['done']);
echo '<div id="done"><strong>Спасибо!</strong> <br />'.$message.'</div>';
}
|
| |
|
|
|
|
|
|
|
для: G-Style
(25.04.2011 в 13:25)
| | 1. А как определяете что не работает именно сессия, а не логика? Попробуйте просто создать два скрипта на котором устанавливается переменная, а на втором выводится - эта система работает?
2. Не может так получиться, что вы устанавливаете переменную в сессию на домене www.domain.dev, а читаете её на domain.dev (для этих двух доменов набор сессионных переменных может оказаться разным)? | |
|
|
|
|
|
|
|
для: cheops
(25.04.2011 в 13:33)
| | Дело в том, что тут очень важен тот момент, что все работает нормально, если только я не удаляю переменную сессии после ее вывода. Если я не использую unset то переменная выводиться отлично, но если я вывел переменную, а затем применил для нее unset то вывод переменной пропадает. | |
|
|
|
|
|
|
|
для: G-Style
(25.04.2011 в 13:47)
| | Ну да, все верно, unset() уничтожает переменную, если страница перегружается или происходит переход на другую страницу, получить доступ к уничтоженной переменной не получится. Скорее всего у вас какая-то разновидность этой ситуации. Так как до уничтожения к переменной всегда можно обратиться (она должна отображаться), если к переменная не выводится, значит после unset() происходит перезагрузка страницы. | |
|
|
|
|
|
|
|
для: cheops
(25.04.2011 в 14:54)
| | Из приведенного выше кода видно, что я вызываю unset() сразу же после того, как вывел переменную. Соответственно никакой перезагрузки и прочих действий не происходит... ладно, буду экспериментировать дальше, может определю почему так происходит. | |
|
|
|