IE和Firefox下的Cookie兼容問題

IEFirefox下的Cookie兼容問題瀏覽器

 

    這個帖是繼於"基於二級域名下Cookie共享的SSO"後續發現的問題,測試結果是這樣的:用Firefox能夠登陸,使用IE後,部分能夠登陸,部分不能夠登陸。最初是懷疑IECookie功能沒有打開引發的,測試到最後這個緣由也排除了。緩存

 

 

 

    既然是經過Cookie實現SSO,那認證必然是保存在Cookie,Cookie文件就是保存在本地的緩 存目錄下(firefox下的Cookie是加密的,查不到Cookie文件),可是奇怪的是IE登陸後,緩存目錄下根本沒有發現生成的Cookie文件,這就是不能登陸的根本緣由。服務器

 

 

 

    爲何沒有生成Cookie文件呢,要不沒有生成,要不生成了又被IE銷燬了。前者不可能發生,若是不生成 Cookie,那爲何有些瀏覽器行,firefox更是所有能夠,只能懷疑第二個緣由,Cookie是被IE自動銷燬了,IE銷燬Cookie是根據 Cookie的生命期,例如,Cookie2009-01-01 01:00:01生成的,有效時間是5個小時,那到了2009-01-01 06:00:01後,IE就會銷燬此Cookie文件。對於IE而言,Cookie的有效時間段是理解爲客戶端的時間與服務器端時間的間隔,而對於 FireFox而言,Cookie的有效時間徹底由服務器端的時間決定,Firefoxcookie不依賴於服務器的時間,可見,FireFox是充分 考慮到了服務器端與客戶端的時差問題。cookie

 

 

 

    當即檢查系統的時間,發現系統時間和服務器沒有差異,有一點納悶,影響時間的還有一個時區(timezone),果真緣由找到,時區設定錯誤。時區設定不正確也會影響IECookie生命期的計算,由於IE Cookie的生命期是基於GMT計算的dom

 

 

 

    緣由總結:沒有登陸成功的IE,是由於沒有設定正確的時區和時間,致使IE錯誤將保存認證信息的Cookie文件自動銷燬了,因此沒法登陸。函數

 

 

    我這邊發現的問題是,ie沒有把cookie,帶個下一個跳轉的域名,不知道是Cookie文件自動銷燬了,仍是不支持?測試

 

    終於解決了,緣由是IEcookie的過時時間不是GMT的格式,使用luacookie的過時時間改成【Sun, 15-Oct-2017 07:38:07 GMT】,就能夠了,以前有改爲10000(格式不對),不行,以後會把過時時間使用lua寫成動態生成的方式。加密

 

    ------------------2015-10-19lua

 

    今天終於使用lua動態指定cookie的過時時間,一開始思路不太對,不太瞭解lua,下面會介紹兩個思路。spa

 

1、使用luaos.date函數,拼接成GMT的格式:

 

       下面的邏輯有個問題,那就是到了2301~23:59時,再加一個小時,會變成2401~24:59,和GMT的時間格式有問題,不知道這一個小時內,仍是否正常,因而換成第二種方法。

 

location ~ ^/test/ {

                content_by_lua '

                        local   hour=os.date("%H");

                        hour = hour + 1

                        local   time1=os.date("%a,%d-%b-%Y ");

                        local   time2=os.date(":%M:%S");

                        expiretime =   time1..hour..time2.." GMT"

                        ngx.header["Set-Cookie"]   = {"dlc=" .. ngx.var.remote_addr .. "; expires=" ..   expiretime .."; domain=.perofu.com; path=/"}

                ';

}

 

2os.time獲取當前時間戳,在使用os.date格式化輸出

 

location ~ ^/test/ {

      content_by_lua '

          local time1 = os.time()

          time1 = time1 + 86400

          expiretime = os.date("%a, %d-%b-%Y %H:%M:%S GMT",time1)

          ngx.header["Set-Cookie"] = {"dlc=" ..   ngx.var.remote_addr .. "; expires=" .. expiretime ..";   domain=.perofu.com; path=/"}

';

}

 

相關文章
相關標籤/搜索