mapsitna
6.10.2009 - 18:14
Я неопытен в программировании PHP. Чаще всего пишу код, обложившись литературой. В настоящий момент написал некий код, связанный с Сессиями, который работает, хотя согласно моему пониманию Сессий работать не должен. Оттого в голове сумятица. Помогите разобраться!
Итак, имеется страница (файл 01.php) с формой, данные которой посылаются обработчику (02.php), который в свою очередь после обработки возвращает управление странице (01.php). Кроме данных формы файл-обработчик получает некоторые данные посредством сессионных переменных. Как известно, присвоения сессионным переменным должны состояться до того, как на этой странице появится хоть какой-либо вывод в браузер html-кода. По-моему мнению, я нарушил этот запрет, но, тем не менее, сессионные переменные передаются. Как реалист, я понимаю, что ничего не нарушал, но мои глаза уверяют меня в обратном. В чём я ошибаюсь?
Схема кода страницы (1). (файл 01.php).
1.
PHP |
require_once("file1.php "); // здесь присоединяется описание php-функции func(параметры), в которой сначала расписаны присвоения сессионным переменным, а затем написан вывод html- |
2.
PHP |
require_once("file2.php "); // здесь присоединяется (а значит, выводится) html-код. |
3.
PHP |
func(...); // здесь вызывается функция, чьё описание в file1.php |
Я вижу, что во 2-м пункте добавляется
php-код с выводом html-кода, а далее следует вызов функции, в которой идёт присвоение сессионным переменным. Отчего тогда всё работает?
Спустя 19 минут, 7 секунд (6.10.2009 - 17:33) glock18 написал(а):
Цитата |
Как известно, присвоения сессионным переменным должны состояться до того, как на этой странице появится хоть какой-либо вывод в браузер html-кода |
не совсем так. сессия должна быть начата до отправки браузеру ответа, но переменные можно назначать позже. причина состоит в том, что когда сессия начинается, сервер отправляет браузеру сессионную куку в заголовках. Соответственно, заголовки должны быть выставлены до того, как будет начата отправка тела запроса.
После того, как сессия уже начата (сессионная кука отправлена), переменные в сессию назначать можно в любой момент.
Спустя 3 часа, 28 минут, 36 секунд (6.10.2009 - 21:02) mapsitna написал(а):
to glock18
Для меня смысл ещё остался тёмен. А можно Вас попросить на моём примере изобразить наглядную хронологическую раскладку (протокол) обменных операций "клиент-сервер", отражающую эту тонкость с куками, сессией, её переменными. Типа:
1. (загрузка формы)
Клиент делает запрос серверу на получение страницы 01.php => Сервер....
=> ... => ... => сессионные переменные получают значения => ... => ...
2. (обработка формы)
Клиент нажимает Submit формы => ... => ...
Буквально слёзная просьба. Для срочного дела нужно. Чувствую, что всё просто, но как честный ламер никак не словлю мысль за хвост. Не понимаю процесс в подробностях.
Спустя 21 минута, 56 секунд (6.10.2009 - 21:24) glock18 написал(а):
mapsitna
что конкретно непонятно? там и отображать то нечего. и нет такого этапа "сессионные переменные получают значения". я же сказал, что их хоть когда можно назначать, если сессию уже открыли (session_start). так вот прям все расписывать долго и муторно. если есть какой-то пример того, что непонятно, киньте цитату сюда, я посмотрю и попробую объяснить.