【问题标题】:How to pass session / cookie from main domain to subdomains in Nginx?如何将会话 / cookie 从主域传递到 Nginx 中的子域?
【发布时间】:2023-03-06 12:31:01
【问题描述】:

所以我在我的主域中有一个子域的 iframed 页面,而这个子域页面需要用户登录并具有访问权限。

基本上,我需要将会话变量和 cookie 传递给子域,以便 iframe 加载。

如何在 Nginx 中实现这一点?

【问题讨论】:

    标签: php nginx cross-domain


    【解决方案1】:

    Cookie 有一个domain 属性,它指定它们将从客户端发送到哪些域。例如,在 PHP 的 setcookie 函数中,第 5 个参数接受要在 cookie 中设置的 $domain 字符串。默认情况下它是空白的,这意味着它会在客户端收到请求时使用请求来自的域。

    cookie 可用的域。将域设置为“www.example.com”将使 cookie 在 www 子域和更高的子域中可用。可用于较低域的 Cookie,例如“example.com”,将可用于较高的子域,例如“www.example.com”。仍在实施已弃用的 » RFC 2109 的旧浏览器可能需要前导 .匹配所有子域。

    因此,如果您将 cookie 设置为您的主域,客户端 UA 将不会有任何问题,使其可用于您的子域。

    不过,现在 iframe 有点棘手。例如,由于其不同的隐私政策规则,Internet Explorer 可以区别对待 iframe,并阻止 iframe 中的所有 cookie。有关详细信息,请参阅this question。然而,Nginx 真的不应该在这一切中扮演任何被动角色。

    【讨论】:

    • 好吧,在这种情况下,我没有为任何特定域设置 cookie,所以它只是为 domain.com 设置它。按照你说的,不应该是自动为其他子域设置吗? sub1.domain.com、sub2.domain、com 等?这个问题与 IE 无关,老实说,我不相信我的任何目标用户甚至会使用浏览器的笑话。所以基本上我只需要确保会话 cookie 传递到 iframed 子域。我相信 iframe 对此没有干扰,因为如果我直接访问 iframe 页面,它就没有有效的会话。
    • 我可能应该指的是子域在不同的 ip 上
    • IP 在这里无关紧要。您可能首先要做的是使用 Chrome 或 FireFox 开发工具之类的工具检查浏览器中的 cookie,并查看客户端 UA 实际设置的域,而不是仅仅做出假设。
    • 另外,“它没有有效的 sessio”是可疑的。可能是处理子域请求的进程不接受 cookie,也可能是 UA 根本没有发送 cookie。所以它并没有缩小问题的范围。
    • cookie 设置为主域。但是,当我尝试访问子域时,它会为其设置一个新的 cookie,因此 domain.com 和 sub.domain.com 都有 cookie。有效会话使用 cookie 并能够检测登录状态和成员资格等变量,因为尽管我登录到主域,但子域和 iframe 总是无法告知。
    猜你喜欢
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 2011-04-24
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    相关资源
    最近更新 更多