【问题标题】:Session Id Changes Across Subdomains - When Called Via AJAX跨子域的会话 ID 更改 - 通过 AJAX 调用时
【发布时间】:2019-01-26 14:04:00
【问题描述】:

我有一个域 example.com。在这个域上,我有两个子域,code.example.comwww.example.com

我的 php.ini 文件中包含以下行: session.cookie_domain = ".example.com"

如果我在 code.example.com 上有一个设置 PHP 会话变量的简单 PHP 页面,那么 www.example.com 上的页面可以读取该会话变量.

code.example.com/test.php

session_start();
$_SESSION["testa"] = "a";

www.example.com/test.php

session_start();
echo("session testa = " . $_SESSION["testa"]);

这是经过验证且有效的。它正确地回响,session testa = a

但是,如果我做同样的事情,但这次如果我在 www.example.com 上有一个页面调用 code.example.com/test.php 通过 AJAX,当我在 www.example.com/test.php 上读取会话变量时,它失败了。会话变量不存在。

我通过在 Firefox 的开发工具中使用 Network > Cookies 来跟踪这一点。我可以确认会话 id 确实不同,并且在通过 AJAX 执行此操作时未正确传递。

在我的 AJAX 调用中,我设置了 crossDomain: true,在我的 PHP 文件中设置了 header("Access-Control-Allow-Origin: *");

我真的很茫然。

我所说的所有搜索都是为了修改 php.ini 文件。但是,我已经做到了。跨子域会话确实有效。只是不是通过 AJAX 调用。

非常感谢任何想法。

谢谢!

【问题讨论】:

    标签: php ajax subdomain session-cookies


    【解决方案1】:

    不要包含“.”在顶级域名前面。 httprequestobject 还需要 ( bool ) obj.withCredentials = tree;供对象访问跨域cookies。

    【讨论】:

    • 我试过了,但似乎没有什么不同。
    猜你喜欢
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 2012-02-08
    • 2011-12-26
    • 2011-01-07
    • 1970-01-01
    • 2014-09-25
    • 2014-05-10
    相关资源
    最近更新 更多