我想
这不是一个Laravel问题,但这是我正在使用的PHP框架。
我有以下子域:app.hostname.dev
和api.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",那么它应该在您的两个子域中都可用。