我的应用程序具有以下结构:子域上有前端 js 应用程序(角度),app.
根有后端(PHP)和api.
子域上有后端(PHP)。我的登录是通过存储会话 cookie 的 root 完成的。cookie 存储在路径为“/”的所有子域中。
直接在api上我可以得到cookie。然而,在相同的 url 上,但通过来自前端的 ajax GET 调用,cookie 为 NULL。
但是使用像 Postman(chrome 应用程序)这样的应用程序对同一 URL 的 GET 请求,我可以获取 cookie。所以它似乎特定于我的应用程序前端。
这是我的角度应用程序的设置。我在我的应用配置中设置了这些默认值:
$httpProvider.defaults.useXDomain = true;
$httpProvider.defaults.withCredentials = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
我已经在 Chrome 和 FF 上进行了测试。无法弄清楚为什么我的 cookie/会话在我的前端和后端之间不可用
2013 年 11 月 20 日更新
我使用的 Angular 版本也有问题。因为我使用$resource
的不是just $http
,所以那个版本的angular在使用时没有将withCredentials
设置附加到http请求$resource
。更新到最新的 angularjs 版本解决了我的问题。因为没有设置 withCredentials 我的 cookie 没有与 xhr 请求一起发送。愚蠢的是,我没有检查是否正在发送 cookie。