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=/"}

';

}