我猜不是特别是Laravel问题,但它是我正在使用的PHP框架。
我有以下子域:app.hostname.dev
和api.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请求无法使用。
答案 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"然后它应该在你的两个子域中都可用。