wap和web上cookie的domain设置的异同

来看下一段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

发表评论