相信做過web開發的同學都知道頁面中的cookie了。cookie,是客戶端存儲信息的一種機制,可以在瀏覽器中保存一些本地的數據,以便下次訪問時取回使用。在php中,要使用setcookie函數來設置cookie,但是可能會出現寫不進去的情況。
一般來說,寫不進去的原因有以下幾種:
1、已經輸出了http頭信息 2、域名不同 3、cookie文件夾權限問題 4、設置了http_only等屬性限制 5、值的長度問題
對于第一種情況,因為setcookie函數需要在http頭信息輸出之前設置,所以如果在輸出http頭信息之后就調用此函數,就會拋出“Cannot modify header information”錯誤。可以通過ob_start()開啟緩存,把所有輸出先緩存到內存中,然后設置完cookie后再輸出。
ob_start(); setcookie('name', 'xiaoming'); ob_flush();
第二種情況一般是由于cookie設置了域名,而當前訪問的域名與設置的不一致,從而導致寫不進去。可以考慮在setcookie函數中不設置域名,這樣默認就是當前域名,可以解決此問題。
setcookie('name', 'xiaoming', time() + 3600, '/');
第三種情況是因為cookie文件夾沒有權限導致無法寫入cookie文件。可以使用chmod 777命令修改文件夾權限。
chmod 777 cookie_folder/
第四種情況是因為設置了http_only等屬性限制,使得只有http協議才能訪問cookie,而不能通過js等方式訪問。可以通過設置httponly為false來解決此問題。
setcookie('name', 'xiaoming', time() + 3600, '/', '', false);
第五種情況是因為值的長度超過了限制,導致無法寫入。可以通過截取字符串或者序列化后進行存儲解決問題。
setcookie('name', serialize($arr), time() + 3600, '/', '');
以上就是常見的php cookie寫不進去的原因和解決方法。在實際開發中,我們要根據具體情況來選擇解決方案。