【问题标题】:Read Cross-Domain (Cross-Sub-Domain) Cookies in ColdFusion (HTTPS)在 ColdFusion (HTTPS) 中读取跨域(跨子域)Cookie
【发布时间】:2012-01-19 20:15:11
【问题描述】:

我需要使用 ColdFusion 从 http://origin.domain.com 读取在 https://sub1.domain.com 创建的 cookie。我已经看到很多关于如何使用 CFCOOKIE 在子域中创建 cookie 的信息,但我不知道如何访问已经存在的 cookie。

HTTPS 会让这一切变得不可能吗?

附录: 下面的检查答案正确地解决了上述问题。就我而言,它不起作用。我应该解释一下:sub1.domain.com 上的 cookie 是由托管的第三方产品创建的 - 不是用 Coldfusion 编写的,也不受我的控制。

【问题讨论】:

    标签: cookies coldfusion cross-domain subdomain


    【解决方案1】:

    这真的很容易。创建 cookie 时,为其指定与您的域相同的域属性。要记住的重要部分是它必须有一个前导点。

    <cfcookie name="mycookie" value="myvalue" domain=".mydomain.com" path="/" />
    

    前导点告诉浏览器将 cookie 发送到 mydomain.com 的任何子域,其中包括 sub.mydomain.com 和 blah.mydomain.com。

    然后您就可以像访问任何其他 cookie 一样从任何子域访问 cookie:

    <cfset thevalue = cookie.mycookie />
    

    您应该将此作为支持旧浏览器的最佳做法。

    这是来自 RFC2109 的声明:可能影响旧版浏览器的 HTTP 状态管理机制

    “为了防止可能的安全或隐私侵犯,用户代理 如果... 则拒绝 cookie(不应存储其信息) Domain 属性不包含嵌入的点或不以 一个点。”

    我相信这已被 RFC 2965: HTTP State Management Mechanism 覆盖

    "Domain=value OPTIONAL。Domain 属性的值指定 cookie 对其有效的域。如果明确指定 值不以点开头,用户代理提供前导 点。”

    这解释了为什么它可能在现代浏览器中为您工作。我仍然建议您添加它。

    【讨论】:

    • 其实我只是试了一下——我做的时候不需要前导点。
    • HTTPS 可以准备 HTTP cookie,但反过来不行,对吧?
    • 我刚刚尝试的测试是双向的。大概如果您想将其限制为仅 https,您可以指定 secure="true"
    • 前导点可能并非所有浏览器都需要,但对某些浏览器可能是必需的。包含它是最佳实践。由用户代理(浏览器)决定是否缺少前导点是否意味着它应该包含子域,因此通过包含它来明确定义行为符合您的最佳利益。
    • @Henry Cookies 在 HTTP 和 HTTPS 之间可以正常工作,除非,正如 jake 所说,设置了安全属性。这只告诉浏览器不要通过非 TLS/SSL 连接发送 cookie。否则,cookie 将根据其域和路径设置发送。
    猜你喜欢
    • 2014-06-25
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多