来看下一段php代码:
<?php header("Cache-control: no-cache, no-store"); header("Pragma: no-cache"); header("Content-type:application/xhtml+xml;charset=utf-8"); mb_internal_encoding("UTF-8"); setcookie("name", "comdeng", time() + 60*60, null, "comdeng.com"); echo("<?xml version=\"1.0\" encoding=\"UTF-8\"?> "); ?> <!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd"> <html lang="zh-CN" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8"></meta> <title>wap网站</title> </head> <body> <?=$_COOKIE["name"] ?> </body> </html>
我把这个页面放在wap.comdeng.com这个域下,在firefox里边刷新这个页面,即可以显示comdeng。也就是说,这个domain设为comdeng.com的cookie在wap.comdeng.com这个域下也能正常使用。用webdeveloper插件可以证实:
也就是说,在web下,将cookie的domain设置为comdeng.com时,浏览器能自动将其转化为.comdeng.com,也就是增加了一个点在最前面。
同样的代码在wap下是怎么样呢?不妨用Openware V7 Simulator的console来查看一下,结果如下:
response header里边的信息如下:
也就是说,这个domain为comdeng.com的cookie已经被写入手机的浏览器端了。刷新页面,看看request header:
可以看出,request header里边根本就没有携带任何cookie的信息,这也就意味着,domain设置为comdeng.com的cookie并不能被手机的浏览器端识别为wap.comdeng.com域下的cookie。这或许应该是手机浏览器的一个小bug吧。
下面来推翻昨天日志里边的观点吧——只要证明domain为.comdeng.com的cookie可以被wap.comdeng.com访问到,就达到目的了。
将上边代码中的comdeng.com改为.comdeng.com后,在web的浏览器里边没有什么差别,不过在手机的浏览器端就表现出差异性了。这是改造过代码后request header的画面:
不错,这时就可以看到domain为.comdeng.com的cookie已经被手机的浏览器端识别出来,通过request发送到服务器端了。
最后,总结一下,设置cookie的domain时,若要考虑多个web和wap网站的cookie共享,一定要在domain的第一个字母设置为.。
.mydomain.com 可以理解成泛解析,所以任何二级域名都可以共享其COOKIE