在PHP的不同子域下为http和https中的站点设置cookie
情况:在PHP的不同子域下为http和https中的站点设置cookie,php,cookies,https,Php,Cookies,Https,情况: 我正在尝试在一个域secure.example.com下运行https存储(xcart),我想访问它在http www.example.com中设置的cookie 我正在Apache(MAMP)上运行PHP,在Firefox中使用Firecookie进行测试 现有代码将Cookie设置为.secure.example.com。我不确定这是否与xcart相关,但实际上使用secure.example.com调用了setcookie。我不知道为什么会附加“” 问题: 当我尝试在https中使
.secure.example.com
。我不确定这是否与xcart相关,但实际上使用secure.example.com
调用了setcookie
。我不知道为什么会附加“
”setcookie
来使用域.example.com
或仅使用example.com
时,无论我是在http还是https下运行存储,都不会创建cookie。我使用的测试代码是:
setcookie('three', 'two', 0, "/", ".example.com");
secure.example.com
或.secure.example.com
,它会显示出来
cookie没有出现有什么原因吗?您是否尝试过
setcookie('three','two',0,“/”,“.mydomain.com”)代码>?是-但策略由浏览器决定(在某些浏览器上可以配置)
IIRC前面的语义。cooke RFCs(2109)对标准Cookie状态进行了解释:
A是FQDN字符串,格式为NB,其中N是非空名称
字符串,B的形式为.B',而B'是FQDN字符串。(因此,x.y.com
域匹配.y.com,但不匹配y.com。)
我将其解释为,setcookie指令中用于通配符匹配的domian应在“.”之前,即..example.com-但是规范继续说:
域=域
可选。Domain属性指定要为其执行操作的域
cookie有效。必须始终启动显式指定的域
带点
这对我来说意味着相反
我建议你自己做实验
显而易见的实用解决方案是,在没有合适的cookie的情况下,重定向回cookie设置Web服务器,以便其检查其cookie,然后将另一个重定向发送回原始服务器,并在查询字符串中包含cookie详细信息,然后删除与当前服务器关联的cookie副本
或者,您也可以通过将FQDN与更多节一起使用来获得一些里程,例如:
secure.www.example.com
及
www.example.com
(正在删除[.]www.example.com的cookie)
嗯
C.问题是,我使用localhost时使用了一个单词域“mydomain”,由于某种原因,这一事实被从原始消息中删除。至少firefox需要至少两个单词才能显式设置cookie,比如mydomain.local。我更改了hosts文件,使其具有以下域:www.mydomain.local和secure.mydomain、 本地,我可以将cookies设置为.mydomain.local
此外,我还发现php会自动在显式设置的Cookie前面加上“.”。我现在正在localhost上运行此操作,因此我没有.com作为结尾,只有www.mydomain和secure.mydomain添加一个主机文件条目(C:\WINDOWS\system32\drivers\etc\hosts)到任何域并将其映射到本地计算机的IP。确保该域未通过浏览器中的任何代理。Gumbo-看起来nilacqua正在使用。例如,在使用localhost调用setcookie时。