Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не отображается значение, помещенное в сессию
 
 автор: G-Style   (25.04.2011 в 12:58)   письмо автору
 
 

Здравствуйте. Помогите разобраться, пожалуйста:


$x = array();
$x['one'] = 'value';
echo $x['one'];
unset($x['one']);



В результате получим вывод строки "value".



$_SESSION['one'] = 'value';
echo $_SESSION['one'];
unset($_SESSION['one']);



В результате ничего не будет выведено. Почему? Почему значение сессии удаляется до того, как выводиться?

  Ответить  
 
 автор: cheops   (25.04.2011 в 13:11)   письмо автору
 
   для: G-Style   (25.04.2011 в 12:58)
 

Вообще-то выводится, в скрипте помимо этих строк еще что-то есть?

  Ответить  
 
 автор: G-Style   (25.04.2011 в 13:17)   письмо автору
 
   для: cheops   (25.04.2011 в 13:11)
 

Уточню, что инициализация сессийной переменной происходит в другом скрипте, который после перенаправляет (header) на страницу, где надо вывести сообщение об успешном завершении операции. И вот так происходит, а если пробовать в одном скрипте, то все работает нормально...

  Ответить  
 
 автор: cheops   (25.04.2011 в 13:18)   письмо автору
 
   для: G-Style   (25.04.2011 в 13:17)
 

Вызов функции session_start() осуществляете в обоих скриптах?

  Ответить  
 
 автор: G-Style   (25.04.2011 в 13:19)   письмо автору
 
   для: cheops   (25.04.2011 в 13:18)
 

Да, конечно. Если я ее не удаляю после вывода, то она выводиться отлично, но если после я пишу unset то, все — переменная не выводиться.

  Ответить  
 
 автор: G-Style   (25.04.2011 в 13:25)   письмо автору
 
   для: 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>';
}

  Ответить  
 
 автор: cheops   (25.04.2011 в 13:33)   письмо автору
 
   для: G-Style   (25.04.2011 в 13:25)
 

1. А как определяете что не работает именно сессия, а не логика? Попробуйте просто создать два скрипта на котором устанавливается переменная, а на втором выводится - эта система работает?
2. Не может так получиться, что вы устанавливаете переменную в сессию на домене www.domain.dev, а читаете её на domain.dev (для этих двух доменов набор сессионных переменных может оказаться разным)?

  Ответить  
 
 автор: G-Style   (25.04.2011 в 13:47)   письмо автору
 
   для: cheops   (25.04.2011 в 13:33)
 

Дело в том, что тут очень важен тот момент, что все работает нормально, если только я не удаляю переменную сессии после ее вывода. Если я не использую unset то переменная выводиться отлично, но если я вывел переменную, а затем применил для нее unset то вывод переменной пропадает.

  Ответить  
 
 автор: cheops   (25.04.2011 в 14:54)   письмо автору
 
   для: G-Style   (25.04.2011 в 13:47)
 

Ну да, все верно, unset() уничтожает переменную, если страница перегружается или происходит переход на другую страницу, получить доступ к уничтоженной переменной не получится. Скорее всего у вас какая-то разновидность этой ситуации. Так как до уничтожения к переменной всегда можно обратиться (она должна отображаться), если к переменная не выводится, значит после unset() происходит перезагрузка страницы.

  Ответить  
 
 автор: G-Style   (25.04.2011 в 15:01)   письмо автору
 
   для: cheops   (25.04.2011 в 14:54)
 

Из приведенного выше кода видно, что я вызываю unset() сразу же после того, как вывел переменную. Соответственно никакой перезагрузки и прочих действий не происходит... ладно, буду экспериментировать дальше, может определю почему так происходит.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования