我的应用程序具有以下结构: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-Headers
和 Access-Control-Allow-Headers
,以及其他 Access-Control-。 ..
请求和响应中的 header ,并确保服务器正确处理 OPTIONS 方法请求和所有 CORS header 。
关于php - 使用 AngularJS 和 PHP 创建跨子域 cookie/session,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19772401/