Thursday, August 21, 2008

IE無法獲得cookie的問題


 覺得很奇怪的問題~



同樣是使用cookie, php.ini 也設定一樣了



原本以為是windows 下使用apache 支援 cookie



而在 linux 中使用 lighttpd 太輕小所以沒有支援cookie



不過似乎也不是如此



不然為何在不管再windows 或 linux 下使用localhost 都可以取得到cookie 資料



在windows 下用IE 要取的linux webserver 發出的cookie 就有問題

同樣再windows 下使用firefox 就可以正確取得linux webser 發出的cookie!!



怪了怪了



是了許多關鍵字~只能說太神奇了



網路真的很方便~ 真的奇奇怪怪的問題都會有人解答



文章reference here [IE无法获得cookie的问题]



今天測試後台系統的時候,發現用IE6.0總是無法正常登錄。 每次登录后又被重定向回了登录頁面。每次登錄後又被重定向回了登錄頁面。 可换成Firefox却一切OK。可換成Firefox卻一切OK。

初步推断应该是Cookie的问题。初步推斷應該是Cookie的問題。 把所有现有Cookie删除,又将“隐私”选项设为“接受所有Cookie”后再试。把所有現有Cookie刪除,又將“隱私”選項設為“接受所有Cookie”後再試。 问题依旧。問題依舊。

没办法,只能用Ethereal抓包了。沒辦法,只能用Ethereal抓包了。 谁知一看就发现问题了:誰知一看就發現問題了:

expires= Tue ,31-Oct- 2006 00:23:00 GMT; path=/ expires= Tue ,31-Oct- 2006 00:23:00 GMT; path=/

Cookie的过期时间居然是2006年…… Cookie的過期時間居然是2006年……

把服务器日期改了之后再抓,发现Cookie的过期时间还是比当前时间早一个小时。把服務器日期改了之後再抓,發現Cookie的過期時間還是比當前時間早一個小時。 一个小时?一個小時? 莫不是时区的问题?莫不是時區的問題? 一看,果不其然。一看,果不其然。 服务器的时区是GMT+09:00。服務器的時區是GMT+09:00。 而自己机器上的时区却是GMT+08:00。而自己機器上的時區卻是GMT+08:00。 搞定!搞定!

但是为什么用Firefox没有问题呢?但是為什麼用Firefox沒有問題呢?

看了IE6.0 与FireFox 对Cookie时间的不同理解这篇文章后恍然大悟:



对 于IE6.0而言,Cookie的有效时间段是理解为客户端的时间与服务器端时间的间隔,即如果Cookie的时间设置为time()+300,那么在 IE6.0里,Cookie有效的条件是:客户端时间(验证Cookie时间)-服务器端时间(定义Cookie的时间)<300(秒);所以这种 情况下,当我们网站上的验证码脚本被执行时,Cookie就已经过期了,所以验证码失效。 對 於IE6.0而言,Cookie的有效時間段是理解為客戶端的時間與服務器端時間的間隔,即如果Cookie的時間設置為time()+300,那麼在 IE6.0裡,Cookie有效的條件是:客戶端時間(驗證Cookie時間)-服務器端時間(定義Cookie的時間)<300(秒);所以這種 情況下,當我們網站上的驗證碼腳本被執行時,Cookie就已經過期了,所以驗證碼失效。

而对于FireFox而言,Cookie的有效时间完全由服务器端的时间决定,以上面的假设为例,即Cookie有效的条件是:服务器端时间T2 (验证Cookie时间)-服务器端时间T1(定义Cookie的时间)<300(秒)。 而對於FireFox而言,Cookie的有效時間完全由服務器端的時間決定,以上面的假設為例,即Cookie有效的條件是:服務器端時間T2 (驗證Cookie時間)-服務器端時間T1(定義Cookie的時間)<300(秒)。 所以在FireFox里,当打开系统登录页时,我输入用户名、密码及验证码的时间肯定不会超过300秒,自然就可以正常登录。 所以在FireFox裡,當打開系統登錄頁時,我輸入用戶名、密碼及驗證碼的時間肯定不會超過300秒,自然就可以正常登錄。

可见,FireFox是充分考虑到了服务器端与客户端的时差问题。 可見,FireFox是充分考慮到了服務器端與客戶端的時差問題。






真是很神奇



突然想起我的linux 主機的時間是比較慢的,調整了時間跟windows系統對時之後



的確就可正確的拿到cookie了!!!





No comments:

Post a Comment