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

Session Storage Variable after Page Redirect (using AngularJS route)

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

出于测试目的,我在我的本地主机上有 运行 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';

我想从这里访问会话或本地存储:

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

但变量是'null'。

顺便说一句,cookieStore 可以正常工作...

所以我的问题是,当我重定向到另一个 url(或本例中的本地主机端口)时,是否有专门针对 session/localstorage 的限制?

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

由于 sessionStoragelocalStorage 依赖于应用程序,您无法从其他上下文访问它们。

由于您是从http://localhost:8080 to http://localhost:8050出发, 这意味着您正在加载另一个 page/document。

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

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

因此,更改源的任何部分都会导致同时更改数据存储上下文。

这是域问题。搭建一个反向代理服务器,把你的真实服务器隐藏在它后面,这样就会出现下面的情况

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

现在浏览器只会将 localhost 视为主机,您的应用程序应该可以正常工作。

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