我剛注意到一些奇怪的東西。我認爲,作爲PHP手冊說,session_start()
必須之前的任何輸出發送到瀏覽器調用:session_start()在發送輸出後工作
要使用基於cookie的會話,在session_start()必須outputing任何內容到瀏覽器之前被調用。
所以,只是爲了好奇,我創建了兩個腳本。一個是write.php:
<?php
echo 'foo';
session_start();
$_SESSION['bar'] = 'baz';
?>
而另一種是read.php:
<?php
echo 'foo';
session_start();
var_dump($_SESSION['bar']);
?>
令人奇怪的是,在會話寫入和讀取echo
荷蘭國際集團富即使經過。
但是,如果我的echo
年代後添加一個調用flush()
,Apache的錯誤日誌報告:
[星期二年1月3 11點57分21秒2012] [錯誤] [客戶端127.0.0.1] PHP警告:session_start():無法發送會話緩存限制器 - 已在第5行的/var/www/sessions/write.php中發送的頭文件 [Tue Jan 03 03:57:21 2012] [error] [client 127.0.0.1] PHP Stack trace: [Tue Jan 03 11:57:21 2012] [error] [client 127.0.0.1] PHP 1. {main}()/var/www/sessions/write.php: [Tue Jan 03 11:57:21 2012] [error] [client 127.0.0.1] PHP 2. session_start()/var/www/sessions/write.php:5
所以,我的問題是:爲什麼會話在echo
之後正確寫入東西?它不是立即發送到瀏覽器嗎?而且,如果是這樣,是否意味着我可以在任何地方開始會議,只要我之前不打電話給flush()
?
[谷歌「PHP輸出緩衝」](http://www.google.com/search?q=php+output+buffering) – DaveRandom 2012-01-03 11:02:39