我一直试图完成这项任务很长一段时间但尚未取得任何突破。如果有人能帮助我,我会非常感激。
现状:
我有两个应用程序,我在两个子域中运行
st.localhost:8080和acm.localhost:8080
当用户尝试访问其中一个网址时,我会使用Angular $ cookies服务搜索名为'auth'的Cookie。如果定义或存在cookie,则将用户重定向到原始应用程序。但是,如果未定义cookie,则会将用户重定向到登录页面(登录页面同时驻留在两个应用程序中)。
在登录页面中,成功完成凭据检查后,我再次使用随机值设置'auth' Cookie。这个cookie应该在两个子域之间共享。
快递:
$scope.login = function(formValid){
$scope.incorrectCredentials = false;
if(formValid){
$http.get('/login',
{
params: {
username: $scope.username,
password: $scope.password
},
headers : {
'Accept' : 'application/json'
}
}
).then(function(response){
$scope.incorrectCredentials = false;
var obj = $cookies.getObject('auth');
console.log("auth is: " + obj);
$state.go($stateParams.origin);
}, function(response){
$scope.incorrectCredentials = true;
});
}
}
角
以下登录功能由ST和ACM应用程序共享
var obj = $cookies.getObject('auth');
console.log("auth is: " + obj);
Express能够成功创建cookie'auth',因为我可以在/ login服务响应中看到Set-Cookie标头。但是,浏览器没有将此cookie附加到我从我的应用程序(例如st.localhost)创建的后续API请求中。我也无法通过Angular读取这个cookie。
$( function() {
$("#datepicker").datepicker({
minDate: new Date(),
beforeShowDay: function(date) {
var day = date.getDay();
return [(day != 0), ''];
}
});
} );
导致obj未定义。
我觉得我将cookie的域名设置为来自其中一个子域的“localhost”的方式有问题。
有关我可能做错的任何建议吗?
提前致谢。
答案 0 :(得分:1)
这是我第二次回答自己的问题。我想在下次发布问题之前我需要更耐心一点。无论如何,我希望这个答案对那些像我一样陷入类似情况的人有所帮助。
首先,我发现即使您在其中一个子域中创建了,也可以在子域之间共享Cookie 。但是,有一些帖子/答案说不然。
在其中一个子域中创建cookie时需要做的是参数“domain”需要设置为父域值。例如,如果您在 st.testserver.com 中创建Cookie,则在设置可共享Cookie时,必须将“domain”参数设置为'。testserver'强>
但是,如果您的父域名也是顶级域名(TLD),那么您将无法在子域名中创建共享Cookie。这正是我在发布这个问题时发生的事情。
当我使用st.localhost并尝试创建一个'domain'为'.localhost'的cookie时,它不允许我这样做,因为localhost在这里是TLD。但是当我将我的域名重命名为st.testserver.com时,我能够将'domain'创建为'.testserver.com',因为它不再是TLD了。
我希望有人可以验证此答案一次,如果我提供了任何不正确的信息,请告诉我。
感谢。
答案 1 :(得分:0)
Cookies是特定于域的,如果您想跨域访问,则需要使用一些跨存储(如跨存储等)。