在PHP中为不同子域下的http和https设置站点的cookie

时间:2010-03-17 17:37:22

标签: php cookies https

情况:

  1. 我正在尝试在一个域 secure.example.com 下运行https商店(xcart),我想要访问它在http www.example.com中设置的cookie
  2. 我在Apache(MAMP)上运行PHP,使用Firecookie在Firefox中进行测试
  3. 现有代码将Cookie设置为.secure.example.com。我不确定这是否与xcart相关,但setcookie实际上是使用secure.example.com调用的。我不确定为什么附加“.”。
  4. 问题:

    1. 当我尝试在https中使用setcookie来使用域.example.com或仅使用example.com时,无论是否在http下运行商店,都不会创建Cookie HTTPS。我正在使用的测试代码是:

      setcookie('three', 'two', 0, "/", ".example.com");
      
    2. 如果我将Cookie设置为secure.example.com.secure.example.com,则会显示。

      有没有出现cookie的原因?

3 个答案:

答案 0 :(得分:3)

问题在于我使用localhost和一个单词域名'mydomain',这个事实由于某种原因被编辑出原始邮件。至少firefox要求显式设置cookie至少有两个单词,比如mydomain.local。我将hosts文件更改为域名:www.mydomain.local和secure.mydomain.local,我能够将cookie设置为.mydomain.local。

另外我发现php会自动输入“。”在明确设置cookie之前。

答案 1 :(得分:1)

是 - 但政策由浏览器确定(在某些浏览器上可以配置)。

IIRC前面的语义。在库克RFC中解释(2109用于标准cookie状态:

  

A是FQDN字符串,格式为NB,其中N是非空名称   字符串,B的格式为.B',而B'是FQDN字符串。 (所以,x.y.com   域名匹配.y.com但不是y.com。)

我将其解释为意味着setcookie指令中的domian打算用作通配符匹配,应该以'。'开头。即.example.com - 但规范继续说:

  

域=域        可选的。 Domain属性指定用于的域        cookie有效。明确指定的域必须始终启动        带点。

对我而言,这恰恰相反。

我建议您自己read it并进行实验。

显而易见的实际解决方案是,在没有合适的cookie的情况下,重定向回到cookie设置的网络服务器,以便检查其cookie,然后将另一个重定向发送回原始服务器,并在查询字符串中包含cookie详细信息,然后删除与当前服务器关联的cookie的副本。

或者,您可能会因使用更多部分的FQDN而获得一些时间,例如

secure.www.example.com

www.example.com

(删除[。] www.example.com的cookie)

HTH

下进行。

答案 2 :(得分:0)

你试过setcookie('three', 'two', 0, "/", ".mydomain.com");吗?