【问题标题】:Laravel CORS subdomain sessionLaravel CORS 子域会话
【发布时间】:2014-08-05 12:58:02
【问题描述】:

我在通过 ajax 请求的子域中遇到 Auth::check() 问题.. 设想: 2个子域

www.testing.dev
api.testing.dev

这两者之间的单一登录/会话.. 在 laravel config/session.php 中我设置了'domain' => ".testing.dev",一切正常,我可以登录一个页面并继续登录另一个页面!

但是当我使用 ajax 时出现问题.. 场景:在api.testing.dev,我用firebug,js,随便什么

$.ajax({
    url: 'http://api.testing.dev/who',
    type: 'GET',
    cache: false
});

api.stesting.dev/who 返回:

public function getWho(){
    return var_dump( Auth::user() );
}

回复是我账号的信息!都对..

如果我从 www.testing.dev 执行相同的 ajax 查询,我会得到 Auth::check() 返回 null。虽然我得到了正常的响应,所以跨域设置没有问题..这是我在api.testing.dev路由中的标题

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: OPTIONS, POST, GET, PUT, DELETE');
header('Access-Control-Allow-Headers: *');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Credentials: true');

网站使用 wamp 在 localhost 中运行。

编辑:使用默认会话驱动程序'driver' => 'file',初始登录后,app/storage/sessions 中有一个文件。如果我从一个子域转到另一个子域,则不会生成其他文件。 虽然当我执行 CORS ajax 时,每次生成一个新文件时......

【问题讨论】:

  • 在这里遇到完全相同的问题。
  • 快速提问,您如何设置 cookie 的域?
  • 在 app/config/session.php 文件中,适当地设置“域”。 (对于多子域站点,请将其设置为“.site.com”)
  • 这里也一样!使用 Laravel 5.0

标签: php ajax session laravel


【解决方案1】:

看到你的配置,可能你遇到了和我一样的问题。我没有使用 Auth,而是使用会话并且每次都得到 null。我通过改变这个来解决它:

header('Access-Control-Allow-Origin: *');
...
header('Access-Control-Allow-Credentials: true');

到这里:

header('Access-Control-Allow-Origin: http://localhost:9000');
...
header('Access-Control-Allow-Credentials: true');

我发现的原因是,当您使用凭据时,出于安全目的,它需要指定来源,而对于 AJAX 请求,它也需要指定凭据。我用的是Angular,我是用$httpProvider.defaults.withCredentials=true;做的,但是我真的不知道jQuery的对应指令,但希望你能找到。

使用您最喜欢的调试器(对我来说是 Firebug)检查请求和响应的标头。它们应该有一个 cookie 属性(它包含带有“laravel”、“token”等的东西),第二次应该等于第一个响应头。

【讨论】:

    猜你喜欢
    • 2014-09-25
    • 2015-03-20
    • 2021-01-01
    • 1970-01-01
    • 2014-10-19
    • 2015-08-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    相关资源
    最近更新 更多