在Laravel PHP和AngularJS中维护子域之间的会话


Maintaining session between subdomains in Laravel PHP and AngularJS

我想

这不是一个Laravel问题,但这是我正在使用的PHP框架。

我有以下子域:app.hostname.devapi.hostname.dev

我有一个 laravel PHP 应用程序,在 API 上有一个 API,在应用程序上有一个 AngularJS SPA 应用程序。

如果我在 API 上创建一个会话变量,它仅适用于该子域。如果我从前端执行 GET AJAX 请求,则下面的var_dump返回 NULL。如果我将 API 终端节点更改为相同的子域 (app.hostname.dev),我会得到正确的会话变量。

//Session::put('test', 'TESTING');
var_dump(Session::get('test'));

这是我的拉拉维尔会话设置:

'driver' => 'cookie', // also tried database
'path' => '/',
'domain' => '.hostname.dev',

以下是我的 AngularJS 设置:

$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];

我认为上述设置足以确保跨域会话?

更新

问题

不是跨域问题,但似乎更像是请求通过 ajax 发送的事实。由于在app.上创建的 seession var 在api.上可用,但通过 ajax get 请求不可用。

问题是没有在 Angular 端设置withCredentials: true;,我的服务器上没有Access-Control-Allow-Credentials: true

Cookie 未随请求一起发送。

在角度配置中:

$httpProvider.defaults.withCredentials = true;

在我的路线中.php在拉拉维尔:

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

我假设您在同一个盒子上运行子域,对吗?

你正在通过PHP使用cookie,对吗?如果是这样,您的 cookie 根域是什么 (http://php.net/manual/en/function.setcookie.php)

如果您的 cookie 域设置为根"hostname.dev",那么它应该在您的两个子域中都可用。