Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP的不同子域下为http和https中的站点设置cookie_Php_Cookies_Https - Fatal编程技术网

在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下运行https存储(xcart),我想访问它在http www.example.com中设置的cookie
  • 我正在Apache(MAMP)上运行PHP,在Firefox中使用Firecookie进行测试
  • 现有代码将Cookie设置为
    .secure.example.com
    。我不确定这是否与xcart相关,但实际上使用
    secure.example.com
    调用了
    setcookie
    。我不知道为什么会附加“
  • 问题:

  • 当我尝试在https中使用
    setcookie
    来使用域
    .example.com
    或仅使用
    example.com
    时,无论我是在http还是https下运行存储,都不会创建cookie。我使用的测试代码是:

    setcookie('three', 'two', 0, "/", ".example.com");
    
  • 如果我将cookie设置为
    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时。