在PHP官方手冊中有這樣一句話:Cookies是http信息頭的一部分,因此setcookie()函數必須在向瀏覽器發送任何輸出之前調用.
我們使用setCookie()函數在服務器端發送cookie到遠端瀏覽器,我們可以在http響應報文中看到我們設置的cookie.
但是問題來了,當我們在調用setcookie()之前向瀏覽器輸出數據,我們還是可以看到cookie被成功設置在遠端瀏覽器.這是爲什麼呢?
因爲在PHP配置文件php.ini中有一個選項output_buffering默認是開啓的,默認值是4096,http響應的數據會先被寫入到php的output_buffering 緩衝區中,當腳本執行結束或者執行了ob_end_flush()函數時 纔會輸出緩衝區內容並關係緩衝區,cookie會在這時候一併輸出到瀏覽器. 所以不管在什麼時候調用setcookie()都是沒問題的.
我們可以將output_buffering選項的值改爲0,這樣就可以關閉PHP緩衝.