js代码
var _domain=document.domain;
$.cookie('lang','en',{path:'/',domain:_domain,expires:+1});
PHP 代码
setcookie('lang', 'en', time()+86400, '/', '', false);
结果设置后查看浏览器cookie,发现存在两个同一名字为lang的cookie,而且js的前面多个'.',PHP用$_COOKIE['lang']读取,只能读取到js设置的那个cookie。
查了下资料,发现这是一个规范的问题,关于cookie的域名规范,参考RFC2109,主机域名x.y.com,cookie域名设置到子域名应该是
.x.y.com
,而PHP操作cookie并没有同步这个,用HTTP_HOST来作为domain值,是没有前面的dot的x.y.com
,所以用js和php写同一个cookie值,域名会不一致,而读取cookie值时,有先匹配到.x.y.com
的cookie值,也就是js的cookie值。所以用PHP写cookie,可以手动在域名前处理.
。