2013-10-10 121 views
1

我猜不是Laravel问题,但它是我正在使用的PHP框架。在Laravel PHP和AngularJS中的子域之间维护会话

我有以下子域: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']; 

我觉得上面的设置就足以保证跨域会话?

UPDATE

问题不是跨域问题,但似乎更像是一个事实,即请求通过AJAX来了。作为app.创建的seession var在api.上可用,但无法通过ajax获取请求。

回答

2

在我的服务器上,问题没有在角度上设置withCredentials: true;,也没有在我的服务器上设置Access-Control-Allow-Credentials: true

Cookies未与请求一起发送。

在角配置:

$httpProvider.defaults.withCredentials = true; 

在我的routes.php文件中laravel:

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

更好的方法是将'header(...)'放在'app/filters.php'中'App :: before',它在请求之前运行。 Routes.php不应该负责或关心标题,所以不要离开它。 – davidnknight

+0

好点谢谢! – iamjonesy

0

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

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

如果你的cookie域设置为root“hostname.dev”,那么它应该在你的子域中都可用。

+0

是的,它实际上是在同一个项目的一部分。我已经通过Laravel会话配置设置了Cookie域。我尝试了.hostname.dev,并且也没有''''''' – iamjonesy