php - 使用 AngularJS 和 PHP 创建跨子域 cookie/session

标签 php angularjs session cookies laravel-4

我的应用程序具有以下结构:app. 子域上有前端 js 应用程序( Angular ),根和 api. 上有后端 (PHP) > 子域。我的登录是通过存储 session cookie 的根目录完成的。该 cookie 存储在路径为“/”的所有子域中。

我可以直接在 api 上获取 cookie。然而,在相同的 url 上,但通过来自前端的 ajax GET 调用,cookie 为 NULL。

但是使用像 Postman(chrome 应用程序)这样的应用程序向相同的 URL 发出 GET 请求,我可以获得 cookie。所以它似乎特定于我的应用程序前端。

这是我的 Angular 应用程序的设置。我在我的应用程序配置中设置了这些默认值:

$httpProvider.defaults.useXDomain = true;
$httpProvider.defaults.withCredentials = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];

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

2013 年 11 月更新

我在使用的 Angular 版本方面也遇到了问题。因为我使用的是 $resource 而不是 $http,所以那个版本的 Angular 在使用时没有将 withCredentials 设置附加到 http 请求$资源。更新到最新的 angularjs 版本解决了我的问题。因为没有设置 withCredentials,所以我的 cookie 没有与 xhr 请求一起发送。愚蠢的是,我没有检查是否正在发送 cookie。

最佳答案

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

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

另请参阅: http://www.html5rocks.com/en/tutorials/cors/

关于php - 使用 AngularJS 和 PHP 创建跨子域 cookie/session,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19772401/

相关文章:

session - 登录页面使用 SSL,未加密的页面看不到加密的 session cookie(Grails、Acegi)

php - "unlearning"当我迁移到 PHP 框架时有多少

javascript - Angular UI 路由器无法在 Chrome 应用程序上运行

如果短时间内调用两次 PHP MySQL 更新不执行

javascript - 在angularjs中注入(inject)依赖项的可维护方式

javascript - 为什么 AngularJS 中的 $event.preventDefault() 不阻止出现上下文菜单?

c# - .NET 中的 Cookie 和 session 过期

php - 无法自动增加 session 值

php - 设置默认图像

php - FCKeditor 阿拉伯语未出现