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

Форум PHP

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

 

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

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

тема: Объявление переменной в сессии
 
 автор: sim5   (30.12.2006 в 14:32)   письмо автору
 
 

Вот запись сессии

param1|i:0;param2|a:0:{}

Регистрирую новую переменную


session_register('param3); 
$_SESSION['param3'] = 1;


Смотрим запись сессии

param1|i:0;param2|a:0:{}param3|i:1;

В записи отсутсвует разделитель ;

В работе кода, регистрирещего в сессии param3, есть ошибка.
Apach при выводе инфы об ошибке упоминает так же PHP-код
в котором обрабатывется param2.

Куда есчез разделитель? Почему?

   
 
 автор: cheops   (30.12.2006 в 15:18)   письмо автору
 
   для: sim5   (30.12.2006 в 14:32)
 

Что хранится в param2?

   
 
 автор: sim5   (30.12.2006 в 15:25)   письмо автору
 
   для: cheops   (30.12.2006 в 15:18)
 

Может быть так, если установлено

param2|a:1:{i:279;i:1;}

   
 
 автор: cheops   (30.12.2006 в 16:48)   письмо автору
 
   для: sim5   (30.12.2006 в 15:25)
 

Нет, имеется в виду изначально? Дело в том, что результирующая строка в файле-сессии появляется в результате серилизации массива $_SESSION при помощи функции serialize(). Проблемы такого толка обычно возникают, если в сессию помещают результат серилизации, так как серилизовать уже серилизованную строку, как правило, корректно не удаётся.

   
 
 автор: sim5   (30.12.2006 в 17:09)   письмо автору
 
   для: cheops   (30.12.2006 в 16:48)
 

param2 (в фигурных скобках) содержит данные переданные из формы, если передачи нет то param2{} (в фигурных скобках пусто). Повторного вызова serialize нет. В скрипт обрабатки param2, также передается еще параметр, назовем его например as. Так вот от прописывается после param2{}as, тоесть также без разделителя, нормально опознается и обрабатывается.

А вот в случае когда я регистрирую переменную (запись без разделителя), то Apach указвая при ошибке, указывает: старт начала переменной param2{} ну далее остальное, затем указывает имя файла скрипта, обрабатывающего этот параметр, и в конце имени после двоеточия цифру 2. Типа так name.php:2.

   
 
 автор: sim5   (31.12.2006 в 07:32)   письмо автору
 
   для: sim5   (30.12.2006 в 17:09)
 

Проверял отдельно - если в сессии присутствуют фигурные скобки, то разделитель после него ВСЕГДА отсутсвует.

Так в чем проблема? Вот что я получаю (сократил для удобства, назвав имена файлов скрипта именами перменных сессии):

Warning: Cannot modify header information - headers already sent by (output started at z:\home\new\www\includes\param2.php:2) in z:\home\new\www\includes\param3.php on line 10

В примере я писал сессию

param1|i:0;param2|a:0:{}param3|i:1;

Указывает ли (:2) на param3|i:1?

В param3.php есть три условия вывода. В одном из них с троке 10:


10   header("Location: index.php?send=1&namepost=".$name); 


В шаблонах используется Smarty. Запрос к страницам происходит через передачу параметров в index.php. Аналогичный переход через заголовок есть и на другой странице (назовем ее условно param5.php;), и при его выполнении сессия будет выглядеть так (условно продолжая наименование):

param1|i:0;param2|a:0:{}param3|i:1;param4|i:1;param5|i:1;

Тоесть, запись после разделителя, и все работает, все передается, и происходит переход на требуемую страницу. Различия в кодах страниц - только именами переменных, в их числе, и разном содержании страниц. Почему же я получаю:

Warning: Cannot modify header information..... с указанием (для условности) на предыдущую страницу?

   
 
 автор: cheops   (31.12.2006 в 13:32)   письмо автору
 
   для: sim5   (31.12.2006 в 07:32)
 

Вы param2.php включаете в param3.php? Что находится на второй строке файла param2.php?

   
 
 автор: skor   (31.12.2006 в 13:41)   письмо автору
 
   для: cheops   (31.12.2006 в 13:32)
 

а обязательно регестрировать сессию?
session_register('param3);

я просто сразу делаю
$_SESSION['test'] = 'значение';

   
 
 автор: cheops   (31.12.2006 в 13:50)   письмо автору
 
   для: skor   (31.12.2006 в 13:41)
 

Да вы делаете всё правильно, session_register() - это устаревший способ.

   
 
 автор: sim5   (31.12.2006 в 14:48)   письмо автору
 
   для: cheops   (31.12.2006 в 13:32)
 

Вторая строка param2.php - это <? Скрипт pdram2.php в pdram3.php не подключается.
Нет :2 означает что-то другое. Может я просто зациклился на сессии, а причина в другом, но в чем, если код по сути одинаков в обеих случаях, а результат разный. И разницу я нашел только в записи сессии.

P.S. cheops даже отвечать не надо. Благодарю, все понял. Даже не понимаю о чем думал когда отвечал - у меня в двух сриптах, в начале пустые строки были (теперь знаю что такое :2). Это наверное от того что уже через три часа у нас наступит Новый год.

Позравляю всех с Новым годом - участников, посетителей и просто странников этого форума!
Всем успехов!

   
Rambler's Top100
вверх

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