爲什麼PHP setcookie()函數在輸出後調用也可以設置cookie在遠端瀏覽器?

在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緩衝.



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章