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

发布于 2024-08-25 16:38:40 字数 781 浏览 1 评论 0原文

情况:

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

问题:

  1. 当我尝试在 https 中使用 setcookie 来使用域 .example.com 或仅使用 example.com 时,没有 cookie已创建,无论我是在 http 还是 https 下运行商店。我使用的测试代码是:

    setcookie('三', '二', 0, "/", ".example.com");
    

如果我将 cookie 设置为 secure.example.com.secure.example.com 它确实会显示。

cookie 没有显示有什么原因吗?

Situation:

  1. I'm trying run an https store (xcart) under one domain secure.example.com and I want to have access to a cookie it sets in http www.example.com
  2. I'm running PHP on Apache (MAMP), testing in Firefox with Firecookie
  3. The existing code sets cookies to .secure.example.com. I'm not sure if this is xcart related, but setcookie is actually called using secure.example.com. I'm not sure why the "." is appended.

Problems:

  1. When I try to use setcookie in https to use the domain .example.com or just example.com, no cookie is created, whether I'm running the store under http or https. The testing code I'm using is:

    setcookie('three', 'two', 0, "/", ".example.com");
    

If I set the cookie to secure.example.com or .secure.example.com it does show up.

Is there a reason the cookie isn't showing up?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

女中豪杰 2024-09-01 16:38:40

问题是我使用的 localhost 带有一个单词域“mydomain”,这一事实由于某种原因被从原始消息中删除了。至少 Firefox 需要至少两个单词来显式设置 cookie,例如 mydomain.local。我更改了主机文件以包含域:www.mydomain.local 和 secure.mydomain.local,并且我能够将 cookie 设置为 .mydomain.local。

我还发现 php 会自动添加一个“.”在显式设置的 cookie 前面。

The problem was that I was using localhost with a one word domain, 'mydomain', a fact which for some reason was edited out of the original message. At least firefox requires at least two words for an explicitly set cookie, something like mydomain.local. I changed the hosts file to have the domains: www.mydomain.local and secure.mydomain.local, and I was able to set the cookies to .mydomain.local.

Also I found that php automatically puts a "." in front of explicitly set cookies.

盛装女皇 2024-09-01 16:38:40

是的 - 但该策略由浏览器确定(并且在某些浏览器上可以配置)。

IIRC 前面的语义。 Cooke RFC 中对此进行了解释(标准 cookie 的 2109 指出:

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

我将其解释为意在用作通配符匹配的 setcookie 指令中的 domian 前面应带有“.”。 ie .example.com - 然而规范继续说:

域名=域名
选修的。 Domain 属性指定了该域
cookie 有效。明确指定的域必须始终启动
带点。

对我来说这意味着相反的意思。

我建议您自己阅读并进行实验。

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

或者,您可以通过使用具有更多部分的 FQDN 来获得一些好处,例如

secure.www.example.com

www.example.com

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

HTH

C。

Yes - but the policy is determined by the browser (and on some browsers can be configured).

IIRC the semantics of the preceding . are explained in the cooke RFCs (2109 for the standard cookies states:

A is a FQDN string and has the form NB, where N is a non-empty name
string, B has the form .B', and B' is a FQDN string. (So, x.y.com
domain-matches .y.com but not y.com.)

Which I would interpret as meaning that a domian in a setcookie directive intended to be used as a wildcard match should be preceded by a '.' i.e. .example.com - however the spec goes on to say:

Domain=domain
Optional. The Domain attribute specifies the domain for which the
cookie is valid. An explicitly specified domain must always start
with a dot.

Which to me implies the opposite.

I suggest you read it yourself and experiment.

The obvious practical solution is, in the absence of a suitable cookie, to redirect back to the cookie-setting webserver for it to check its cookie then send back another redirect to the originating server with cookie details in the query string, then drop a copy of the cookie associated with the current server.

Alternatively you may get some mileage out of using FQDNs with more sections, e.g.

secure.www.example.com

and

www.example.com

(dropping the cookie for [.]www.example.com)

HTH

C.

尝蛊 2024-09-01 16:38:40

您是否尝试过 setcookie('三', '二', 0, "/", ".mydomain.com"); ?

Did you try setcookie('three', 'two', 0, "/", ".mydomain.com"); ?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文