【发布时间】:2014-04-24 17:28:00
【问题描述】:
我在根域上有一个 example.com/login.php 文件,其中包含此代码
header('Access-Control-Allow-Origin: *');
session_set_cookie_params(0, '/', '.example.com');
session_name('lusession');
session_start();
$_SESSION['name'] = $_GET['name'];
$_SESSION['useremail'] = $_GET['useremail'];
$_SESSION['password'] = $_GET['password'];
此文件提供了凭据,然后它会创建登录会话。由AJAX从主域和子域调用。
问题是它在通过 AJAX 调用时不会创建会话,但是当直接在浏览器中作为查询字符串打开时,它会按预期创建跨域会话。
其他通过 AJAX 调用它的页面在开始时有以下代码:
session_set_cookie_params(0, '/', '.example.com');
session_name('lusession');
session_start();
如果我在 login.php 中添加以下代码,它会在 AJAX 响应中显示该会话已创建。但该会话在同一域和其他子域的页面上不可用。
echo 'session created for'.$_SESSION['name'];
检查资源显示 AJAX 调用创建了名称为“lusession”的会话 cookie。
【问题讨论】:
-
session.cookie_httponly(或者:session_set_cookie_params()的第 5 个参数,如果你愿意的话)。 -
我正在探索它;如果你把它写成一个答案,就好像它有帮助一样,我会把它标记为已接受。
-
我会将其添加为真正的答案。如果有帮助,您能否将您的问题更改为“无法使用 javascript 创建 PHP 会话”?下一个遇到问题的人更容易发现。
标签: php ajax session session-cookies