我有一个ASP.NET(MVC)网站,提供静态内容(图像)以及来自同一个域的动态内容.该站点使用表单认证,并具有登录控制器.有一些非常奇怪/不正常的问题,人们发现自己以随机的时间间隔登录或登出,我们已经将其跟踪到一个问题,反向代理缓存一个具有设置cookie响应头的映像文件,验证Cookie.一旦缓存,每个人都会获得相同的验证cookie,这将导致一些非常奇怪的结果.
我的问题是 – 一个图像如何在一个地方得到一个set-cookie头首先?什么是ASP.NET表单认证模块做这个导致这一点 – 当然它将cookie设置为主要的HTML内容响应.我得到的是,然后将所有后续请求发送到域,但我无法确定如何设置cookie首先.
(BTW这个问题也可能是至少有两个现有的大型电子商务网站遇到类似问题的原因,没有解决方案,所以这将是一个很好的解决方案).
响应如下所示(取自fiddler).
HTTP/1.1 200 OK Cache-Control: public,max-age=86400,max-age=86400 Content-Type: image/png Last-Modified: Thu,04 Nov 2010 16:00:52 GMT Accept-Ranges: bytes ETag: "0528474397ccb1:0" Server: Microsoft-IIS/7.5 Set-Cookie: my-auth-cookie=6BC25F1EF71989466A48C0120E7739E; path=/; HttpOnly Date: Wed,17 Nov 2010 17:15:08 GMT Content-Length: 15790
更新:附加信息 – 我们在Win2008 R2上使用IIS 7.5,64位,该应用程序正在使用集成管道/ .net 4的应用程序池下运行.
更新2:我不是在寻找解决问题的方法,我们已经有一个.我正在寻找一个问题的答案,这是为什么它发生在第一位?请不要回答告诉我关于子域名或cookies如何工作!
更新3:在请求中添加:
GET https://www.example.com/sprite.png HTTP/1.1 Host: www.example.com Connection: keep-alive Cache-Control: no-cache Pragma: no-cache Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML,like Gecko) Chrome/7.0.517.44 Safari/534.7 Accept-Encoding: gzip,deflate,sdch Accept-Language: en-GB,en-US;q=0.8,en;q=0.6 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 Cookie: my-auth-cookie=6BC25F1EF71989466A48C0120E7739E;
解决方法
看起来像IIS中的一个bug.我要写一些稻草人的代码,看看我是否完全了解发生了什么,并发布结果.我还将在IIS 7和IIS 7.5上测试它,看看它是否不同.
真的似乎没有一个请求应该得到与之前的请求相关联的任何cookie(我们没有在我们的网站上有任何缓存代理,这在我们的内部网络上发生,所以我的意思是,IIS正在做某事).
–Owen