玩命的cookie

原写于2010-11-08

 

题记:一个cookie,整个下午都没有找到解决的办法

 

一、遇到的问题

1. 情景:访问http://list.mall.daily.taobao.net/50024400/xxx,当前页面通过ajax请求广告,请求的域为http://tmatch.simba.taobao.com/xxx;广告引擎向页面种seesion范围的cookie_back,用于标识翻页;

2. 问题:

点击当前页面的翻页,IE下广告不翻页?通过firebughttpwatch对比,发现IEcookie“_back”不正确。开始猜测是引擎种cookie的逻辑存在问题,但很多地方都在使用此接口,均没有问题。

且有人的机器翻页正常,此时怀疑是浏览器设置问题?再用httpwatch观察“http请求头,发现_back没有回传给引擎(其实httpwatchcookies也可以观察到,如果发送cookie的话,会显示为Sent;之前只观察到Received)? 确认是浏览器的问题。

3. 解决:打开IE隐私设计,通常默认设置为,拒绝没有隐私政策的第三方cookie ...”,意味着_back并没有成功写入客户端,所有请求引擎导致不能正确回传_back,翻页失败。

这么说淘宝所有的广告的翻页都是不可用的 ?肯定不是。问题在第一方 Cookie 来自您正浏览的网站,它们可以是永久的或临时的;第三方 Cookie 来自您正浏览的网站上的其他网站的广告,对于浏览器“taobao.nettaobao.com”就是不同的两个网站,所以引擎的_back是无法种在客户端。此情景是daliy环境,线上的环境访问的是list.mall.daily.taobao.com,所以不存在第三方cookie”的概念,广告是可以正确显示。

 

二、关于cookie小知识

 

1.IE Cookie的格式

第一行名称,第二行,第三行所属域” ...比如“.taobao.com”存在cna,此cookie会被浏览器自动发送到任何属于此域的子域;www.taobao.com\taobao.com,后面的是根域,前一个是二级域。xp存放目录为:C:\Documents and Settings\<username>\Cookies\,文件命名:你的用户名@生成COOKIEdomain[COOKIE改变的次数].txt

参考:http://blog.csdn.net/zhangxinrun/archive/2010/07/31/5779574.aspx

 

2.Js Cookie跨域访问

http://blog.csdn.net/tongdoudpj/archive/2009/05/10/4166096.aspx

 

3.cookiesession的关系

根本的原因:http协议的无状态性,cookie的出现就是为了解决这个问题。

session是一种在客户端与服务器之间保持状态的解决方案。服务端存储内容,返回对应的key给客户端,当下次访问时,带上此key,实现状态的维持。

session实现:

1.依赖cookieThe session cookie is stored in temporary memory and is not retained after the browser is closed。(实际测试:IE8,未在1描述的位置找到session级别cookie对应的文件,猜测临时存储在浏览器内存,当关闭浏览器时则丢失key

2.url重写。Servlet规范定义此功能。当浏览器禁用cookie时,就算session级别的内容也不会被存储。resp.encodeRedirectURL(url)The implementation of this method includes the logic to determine whether the session ID needs to be encoded in the URL.),且仅当禁用cookie时有效,重写结果如:http://www.demo.com/cookie.do;jsessionid=19gfy1sg740dl1whwd72lbqlhb

疑问:server如何判断,是否需要重写呢?从实验现象看,判断是否收到name=JSESSIONID cookie,若无,则进行url重写。最好的方式,翻翻tomcatjetty的源码实现,但未找到对应的代码。

 

关于cookie的详细信息参见: http://en.wikipedia.org/wiki/HTTP_cookie

 

 

你可能感兴趣的:(session,cookie)