我有一个网站,包含三个域:domain.com,sub1.domain.com和sub2.domain.com.
我现在想通过sub1.domain.com上的AJAX获得domain.com上设置cookie的页面.此cookie必须对所有三个域都可用.
我试过了:setcookie(‘name’,’value’,time()3600,’/’,’.domain.com’);我已经尝试过:setcookie(‘name’,’value’,time()3600,’/’,’domain.com’); (注意在域之前的圆点,我被告知旧的浏览器不会接受它.)但是,这没有用.实际上,没有cookie集.
如何在子域的AJAX请求上设置Cookie?我已经添加了标头(‘Access-Control-Allow-Origin:*’);到setcookie-page.
解决方法:
使用凭据时需要满足以下几点:
> withCredentials标志
AJAX请求需要具有xhr.withCredentials = true;组.
>访问控制允许凭证
服务器还必须使用标头(‘Access-Control-Allow-Credentials:true’);进行响应.
>不允许使用通配符
指定withCredentials时,服务器不能允许*的原点.因此,您必须使用有效域列表进行响应:
header('Access-Control-Allow-Origin: http://sub1.domain.com,http://sub2.domain.com');
如果您仍然希望拥有任意子域列表,则可以执行以下操作:
if (substr($_SERVER['HTTP_ORIGIN'], -11) === '.domain.com') {
header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']);
}
这将允许的来源设置为Origin请求标头的值,但前提是它在您的域中.
标签:cookies,php
来源: https://codeday.me/bug/20191031/1974913.html