页面重定向后的会话存储变量(使用AngularJS路由)

时间:2015-02-02 06:58:00

标签: angularjs node.js redirect port angular-local-storage

我有一个场景,我有一个登录页面(稍后将转移到SAML2身份提供程序服务器)。成功验证后,用户将被重定向到另一台服务器(这将托管主应用程序)。

出于测试目的,我在我的localhost上运行了2个nodejs实例(一个在端口8080上,另一个在端口8050上)。在登录应用程序中,我按如下方式设置session / localstroge参数:

on 'http://localhost:8080';

$rootScope.globals = {
                currentUser: {
                    username: username,
                    authdata: authdata
                }
            };

...

$window.localStorage.setItem('globals',  JSON.stringify($rootScope.globals));

以后成功重定向到:

window.location.href = 'http://localhost:8050';

从这里我想访问会话或localstorage:

console.log($window.localStorage.getItem('globals'));

但变量是' null'。

BTW cookieStore没有问题......

所以我的问题是,当我重定向到另一个url(或者在本例中是localhost的端口)时,是否存在对session / localstorage的限制?

5 个答案:

答案 0 :(得分:3)

您不只是将应用程序重定向到另一个URL 您也在更改端口,因此,显然您正在更改应用程序上下文。

由于sessionStoragelocalStorage与应用程序有关,因此您无法从其他上下文访问它们。

答案 1 :(得分:2)

存储的任何数据都与文档来源相关联,因为它与正在使用的特定协议(httphttps等),主机(例如html5doctor.com)和端口(通常/隐式端口80)。

因此,更改原点的任何部分也会导致更改数据存储上下文。

答案 2 :(得分:1)

这是一个域名问题。构建一个反向代理服务器并隐藏它后面的真实服务器,以便发生以下情况

# Request origin » Actual path
#
localhost/api    » localhost:8080/api
localhost/data   » localhost:8085/data

现在浏览器只看到localhost作为主机,您的应用程序应按预期工作。

答案 3 :(得分:0)

由于您从 http://localhost:8080 转到 http://localhost:8050 , 这意味着您正在加载另一个页面/文档。

因此localStorage无法存储您的数据,因为它使用same-origin政策来确定对存储数据的访问权限。

答案 4 :(得分:0)

如果将其重定向到不同的节点实例,则会话和本地存储将无法工作,因为它取决于应用程序,在您的情况下,您正在更改重定向的应用程序,因此您的数据将丢失。