ThinkPHP的cookie和session沖突造成Cookie不能使用的解決方法
近期做一個網(wǎng)站的投票時,遇到ThinkPHP中的cookie和session沖突導(dǎo)致Cookie不能使用的情況。
該網(wǎng)站采用的是ThinkPHP框架制作,有一頁面上面展示很多圖片,要求每個圖片下面有對應(yīng)的投票,通過限制ip地址來,限制游客在一定時間范圍內(nèi),能對多個圖片投票,但是每個圖片只能投票一次,開始使用ip存儲在數(shù)據(jù)庫解決,后來改進(jìn)為使用session存儲,ip在服務(wù)文件里,不過要把生成的sessionid存儲在本地的cookie中,按照ThinkPHP手冊說明操作session一切順利,但是在生成cookie之后,卻在本地電腦中找不到cookie文本,原本以為是本地電腦限制cookie的生成,可是查看和測試的結(jié)果是沒有限制,于是自己又單獨(dú)建立了一個php文件,測試生成cookie,沒問題,在本地找到了cookie文本,于是在網(wǎng)上查找到如下內(nèi)容。順序解決了問題,使用setcookie()函數(shù)設(shè)置cookie,得到了想要的結(jié)果。
解決辦法如下:
找到php.ini 這個配置文件,然后查找一項(xiàng):output_buffering將其值由原來的off改為on,重新啟動Apache就ok了。
另外還有很多相似的問題:
有些時候會發(fā)現(xiàn)原在本地運(yùn)行沒有問題的文件,在服務(wù)器上測試時,竟然提示本地沒有出現(xiàn)的錯誤: Warning: Cannot modify header information - headers already sent by…
這樣的語句,很顯然,造成這個原因是因?yàn)閟etcookie造成的,查了一下網(wǎng)上,有如下的解釋: cookie本身在使用上有一些限制,例如:
1.呼叫setcookie的敘述必須放在標(biāo)簽之前
2.呼叫setcookie之前,不可使用echo
3.直到網(wǎng)頁被重新載入後,cookie才會在程序中出現(xiàn)
4.setcookie函數(shù)必須在任何資料輸出至瀏覽器前,就先送出
基於上面這些限制,所以執(zhí)行setcookie()函數(shù)時,常會碰到“Undefined index”、“Cannot modify header information - headers already sent by”…等問題,解決“Cannot modify header information - headers already sent by”這個錯誤的方法是在產(chǎn)生cookie前,先延緩資料輸出至瀏覽器,因此,您可以在程序的最前方加上ob_start()這個函數(shù)。這樣問題就可以解決了。 但是如果要加上ob_start()的話,有不大可行,程序都寫完了,才來改這個似乎有點(diǎn)郁悶!發(fā)現(xiàn)提示這個錯誤的時候,我就在想我本地怎么沒提示這個問題呢,還以為是PHP.ini配置不一樣,想想又不對,都是差不多的。于是看看后面跟的那句“output started at…”意思是在setcookie之前已經(jīng)在另一處有輸出了,于是找到output started at后面跟的那個文件,最后發(fā)現(xiàn)第一行是空白的。
- thinkphp3.x中cookie方法的用法分析
- thinkphp中session和cookie無效的解決方法
- thinkphp5框架結(jié)合mysql實(shí)現(xiàn)微信登錄和自定義分享鏈接與圖文功能示例
- thinkPHP5項(xiàng)目中實(shí)現(xiàn)QQ第三方登錄功能
- thinkPHP中U方法加密傳遞參數(shù)功能示例
- ThinkPHP實(shí)現(xiàn)的rsa非對稱加密類示例
- thinkphp微信開發(fā)(消息加密解密)
- thinkphp微信開之安全模式消息加密解密不成功的解決辦法
- PHP隱形一句話后門,和ThinkPHP框架加密碼程序(base64_decode)
- tp5框架使用cookie加密算法實(shí)現(xiàn)登錄功能示例
相關(guān)文章
PHP模板引擎Smarty內(nèi)置變量調(diào)解器用法詳解
這篇文章主要介紹了PHP模板引擎Smarty內(nèi)置變量調(diào)解器用法,結(jié)合實(shí)例形式詳細(xì)分析了Smarty中的常用內(nèi)置變量調(diào)節(jié)器定義與使用技巧,需要的朋友可以參考下2016-04-04Yii安裝EClientScript插件擴(kuò)展實(shí)現(xiàn)css,js文件代碼壓縮合并加載功能
這篇文章主要介紹了Yii安裝EClientScript插件擴(kuò)展實(shí)現(xiàn)css,js文件代碼壓縮合并加載功能,分析了EClientScript插件的下載、安裝、設(shè)置及使用的相關(guān)技巧,需要的朋友可以參考下2016-07-07詳細(xì)Laravel5.5執(zhí)行表遷移命令出現(xiàn)表為空的解決方案
這篇文章主要介紹了詳細(xì)Laravel5.5執(zhí)行表遷移命令出現(xiàn)表為空的解決方案,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07