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

时间:2013-10-10 22:33:14

标签: javascript php session angularjs laravel-4

我猜不是特别是Laravel问题,但它是我正在使用的PHP框架。

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

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

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

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

以下是我的laravel会话设置:

'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请求无法使用。

2 个答案:

答案 0 :(得分:2)

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

Cookie未随请求一起发送。

在角度配置中:

$httpProvider.defaults.withCredentials = true;

在laravel的我的routes.php中:

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

答案 1 :(得分:0)

我假设你在同一个盒子上运行你的子域?

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

是什么

如果您的Cookie域设置为root" hostname.dev"然后它应该在你的两个子域中都可用。