最近在做的项目,老是有个神秘的cookie在不该出现的时候出现,后来经过一番检查,发现问题出现在下列语句
If Not Response.Cookies(“SomeCookieName”) Is Nothing Then
‘ do somthing here
End If
发现,假如一开始没有“SomeCookieName”这个cookie,Response.Cookies会自动加上一个,验证了一下,
<%
Response.Write(Response.Cookies.Count & “<BR>”)
for each i as string in Response.Cookies
Response.Write(Response.Cookies(i).Name & “<BR>”)
next
if not Response.COokies(“hello”) is nothing then
end if
Response.Write(Response.Cookies.Count & “<BR>”) ‘多了一个
for each i as string in Response.Cookies
Response.Write(Response.Cookies(i).Name & “<BR>”)
next
%>
在Reflector里发现, System.Web.HttpCookieCollection 类的
public HttpCookie Get(string name)
{
HttpCookie cookie1 = (HttpCookie) base.BaseGet(name);
if ((cookie1 == null) && (this._response != null))
{
cookie1 = new HttpCookie(name);
this.AddCookie(cookie1, true);
this._response.OnCookieAdd(cookie1);
}
return cookie1;
}
确实是如此, 但不是很理解为什么。
当然,也许有人要问,在Response.Cookies里检查某Cookie存在是否恰当?看到编码后,我们发现确实是不太恰当,估计当初是为了赶时间才用了这么一个hack.
在Development Server上,在Staging Server上一切测试都觉得满意后,部署到Live Server上,居然出了问题。反复测试的结果是,在Mozilla FireFox上一切正常,但在IE上有时工作有时不工作。最后用Mozilla FireFox 的Cookie Culler工具发现,有一堆未知的Cookie存在,有时会把我们的Cookie给冲掉,后来才知道他们用了一个第三方公司的ISAPI DLL,用来tracking 用户情况的。这东西大量使用Cookie,少时会产生5个Cookie,多时会产生20个Cookie!大家都知道,在IE里,Cookie是有限制的。
一周之内居然被Cookies烧了2次,唉!