【问题标题】:Cross-Subdomain Post/get Request with PHP Sessions使用 PHP 会话的跨子域发布/获取请求
【发布时间】:2014-06-07 20:14:23
【问题描述】:

我有一个页面 m.mydomain.com/login.php (http/80) 页面使用 jquery.ajaxForm 发布/获取到 auth.mydomain.com/login.php (https/443)

header('Access-Control-Allow-Origin: m.mydomain.com');
ini_set('session.cookie_domain', '.mydomain.com');
session_start();

/**Login and db stuff there*/
if($allowed)
{
   $_SESSION['check_login'] = true;
   print 1;
}
else
{
   print 0;
}

所以在 login.php 中我得到了 ajax 调用“1”的结果,但在访问 $_SESSION 时我得到一个空数组。

代码:

ini_set('session.cookie_domain', '.mydomain.com');
session_start();

print_r($_SESSION);

在浏览器中(使用 GET 请求)定期调用 auth.mydomain.com/login.php (https/443) 会导致在 m.mydomain.com/login.php (http/80) 上登录

【问题讨论】:

  • 域和子域是否运行在同一台服务器上?还要确保每个 PHP 会话 cookie 名称相同。
  • 是的域和子域在同一台服务器上运行。我只是手动设置了一个会话 cookie 名称,我可以读到有一个 cookie 可供读取,但 $_SESSION 是空的
  • 请求是通过 ajax 的吗?如果是这样,您需要确保在 xhr 对象中将 withcredentials 设置为 true。
  • 感谢你成功了
  • 我会将其添加为答案,然后您就可以关闭此问题。

标签: javascript php ajax session


【解决方案1】:

当通过 ajax 执行请求时,您需要确保在 xhr 对象中将 withcredentials 设置为 true,以便 cookie 随请求一起发送。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-13
    • 2013-09-14
    • 2021-11-15
    • 2015-04-16
    • 2016-07-20
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    相关资源
    最近更新 更多