jNe*_*bie 5 php apache subdomain ajax session
我在一个使用子域、会话和 Ajax 的 PHP 项目中工作。但不幸的是我不能让它工作!我会试着解释:
让我们假设我在这个域:app.mysite.com/index.php
在这个域中,我有一个表单可以向mysite.com/functions/execute.php执行 Ajax 请求(没有任何子域)
在execute.php的第一行,我有一个require_once,其中包含一个helper.php文件。在这个文件中,我放了:
ini_set('session.cookie_domain', '.mysite.com');
session_set_cookie_params(0, '/', '.mysite.com');
session_start();
Run Code Online (Sandbox Code Playgroud)
列出的所有 PHP 文件还包括 helper.php。
例如,如果我运行:
echo $_SESSION["myValue"];
Run Code Online (Sandbox Code Playgroud)
在app.mysite.com/index.php或任何其他子域,如auth.mysite.com,我会得到值:"test"。但是如果我在execute.php运行相同的代码,并通过 Ajax 返回值,我将得到未定义的索引!
我究竟做错了什么?
我已经弄清楚如何进行这项工作。Ajax Post 方法默认不发送凭据标头,因此我们需要手动启用:
$.ajax({
method : "POST",
url : "https://example.com/functions/execute.php",
data : myData,
xhrFields: {
withCredentials: true
}
}).done(function(result) {
alert("success"));
});
Run Code Online (Sandbox Code Playgroud)
在execute.php中你需要输入:
ini_set('session.cookie_domain', '.example.com');
session_set_cookie_params(0, '/', '.example.com');
session_start();
header('Access-Control-Allow-Credentials: true');
Run Code Online (Sandbox Code Playgroud)
如果您从子域请求此内容,还需要放入example.php:
header('Access-Control-Allow-Origin: http://app.example.com');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1390 次 |
| 最近记录: |