Я только что заметил что-то странное.Я подумал, что, как говорится в руководстве PHP, session_start()
должен быть вызван перед отправкой любого вывода в браузер:
Чтобы использовать сеансы на основе файлов cookie, session_start () долженперед вызовом чего-либо в браузер.
Итак, для любопытства я создал два сценария.Один из них - write.php :
<?php
echo 'foo';
session_start();
$_SESSION['bar'] = 'baz';
?>
А другой - read.php :
<?php
echo 'foo';
session_start();
var_dump($_SESSION['bar']);
?>
И, что удивительно, сеансзаписывается и читается даже после echo
ing foo .
Однако, если я добавлю вызов к flush()
после echo
s, журнал ошибок Apache сообщит:
[Вт Янв 03 11:57:21 2012] [ошибка] [клиент 127.0.0.1] PHP Предупреждение: session_start (): невозможно отправить ограничитель кэша сеанса - заголовки уже отправлены в / var / www / session /write.php в строке 5 [вт. 03 января 11:57:21 2012] [ошибка] [клиент 127.0.0.1] трассировка стека PHP: [вт. 03 янв. 11:57:21 2012] [ошибка] [клиент 127.0.0.1]PHP 1. {main} () /var/www/sessions/write.php:0 [вторник, 03 января 11:57:21 2012] [ошибка] [клиент 127.0.0.1] PHP 2. session_start () / var / www/sessions/write.php:5
Итак, мои вопросы: почему сессия написана правильно после echo
что-то?Разве это не сразу отправляется в браузер?И, если это так, значит ли это, что я могу начать сеанс где угодно, если я не позвоню flush()
раньше?