使用AngularJS和PHP创建跨子域cookie /会话

iam*_*esy 3 php cookies session angularjs laravel-4

我的应用程序具有以下结构:app.子域上的前端js应用程序(角度)和根api.域和子域上的后端(PHP).我的登录是通过存储会话cookie的根完成的.将为所有子域存储cookie,路径为"/".

直接在api我可以得到cookie.但是在同一个url上,但是通过前端的ajax GET调用,cookie是NULL.

但是使用像Postman(chrome app)这样的应用程序对同一个URL的GET请求,我可以获得cookie.所以它似乎特定于我的应用程序前端.

这是我的角度应用程序的设置.我在我的应用配置中设置了这些默认值:

$httpProvider.defaults.useXDomain = true;
$httpProvider.defaults.withCredentials = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
Run Code Online (Sandbox Code Playgroud)

我已经在Chrome和FF上进行了测试.无法弄清楚为什么我的前端和后端之间的cookie /会话不可用

2013年11月20日更新

我也特别关注我使用的Angular版本.因为我使用的是$resource而不仅仅是$http,在使用时,该版本的angular并未将withCredentials设置附加到http请求$resource.更新到最新的angularjs版本已经解决了我的问题.由于未设置withCredentials,因此我的cookie不会与xhr请求一起发送.愚蠢的是我没有检查是否发送了cookie.

Ada*_*dam 5

withCredentials属性不足以让它工作.服务器响应必须具有Access-Control-Allow-Credentials: true标头.

您还应检查请求和响应中的Access-Control-Request-HeadersAccess-Control-Allow-Headers,以及其他Access-Control-...标头,并确保服务器正确处理OPTIONS方法请求和所有CORS标头.

另见:http://www.html5rocks.com/en/tutorials/cors/