其它 · 2012-07-26

解决IIS7返回header里面的date值不正确导致firefox里cookies无效的问题.

问题:

突然有一天,easybug.net上的登录功能无法使用,原本以为是自己电脑有问题,所以没有理会.后来又有好些用户反应无法登录.我就奇怪了,最近都没有更新过什么,怎么会突然就登录不了了呢.

用了很多方法都没有查到具体的原因,后来因为我点击切换语言的时候,发现这个功能也失效了.所以大致的原因可以锁定在cookies上了.用firebug上的net和cookies模块来监控http请求和cookies的值,发现在net里面是有带了cookies,但是在cookies标签里却看不到系统创建的cookies,就是说浏览器没有把cookies写入到浏览器里面,查了半天没找到什么原因,太神奇了…

后来想想既然在net标签里都已经有cookies信息了,那浏览器应该也是收到的了,会不会是在header里有什么问题呢?果然,看到一个很奇特的信息,在header里面看到这么一行信息:

date:2013-7-25 19:32:28

奇怪了,怎么日期是2013年呢,现在才2012年呢…于是顺藤摸瓜,查一下http协议相关的资料,果然被我查到这样一篇内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Problem Description
 
W3SVC logs show incorrect time - stuck on the same time 2007-11-04 04:56:06
REPRO STEPS
 
    Changed the system time to a future time (e.g. 11th May 2020)
    Browsed any site - verified the log file created in the new date/time
    Changed the system time to be correct (today's date and time)
    Now, browsed any website and saw that the time on the log files is now stuck on 11th May 2020's time
 
RESOLUTION
 
    net stop http
    net start w3svc
 
OR
 
    net stop http
    net start http
    iisreset
 
You must restart the http service whenever you change the date in the server.
 
Verified in the code and confirmed that this is by design and you need to follow the above steps to make IIS logging the correct time.

 

大致的意思是在IIS上,如果修改了服务器当前的日期到2020年,然后访问服务器上的站点,日志文件会以当前日期来记录日志内容,此时再把服务器上的日期修改回正确的日期,再访问站点,日志文件里的日期还是2020年的日期,不会自动修改回来,要解决这种问题,只有重启IIS,而且还一定要重启http这个服务,不然不会有效果的.我按上面的步骤试了一下,再来看一下header里面的date,果然现在已经是正确的值了,试一下登录easybug.net,yeah!!登录成功了!!!

总结出现以上问题的原因来自几个方面:
1. 这算是IIS的一个小小的BUG,不过为何会出现日期不一至呢?大部分是人为的原因造成的.
2.各个浏览器里面,好像只有Firefox在IIS出现这种情况的时候有问题,其它浏览器没有问题.
3.通过设置cookies的失效时间大于header里面date的时间应该也可以解决这个问题,不过没有去测试.
4.百年一遇的情况,RP问题啊:(