页面重定向后的会话存储变量(使用 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。
您还更改了端口,因此,很明显,您正在更改应用程序上下文。
由于 sessionStorage
或 localStorage
依赖于应用程序,您无法从其他上下文访问它们。
由于您是从http://localhost:8080 to http://localhost:8050出发,
这意味着您正在加载另一个 page/document。
因此 localStorage
无法存储您的数据,因为它使用 same-origin
策略来确定对存储数据的访问权限。
任何存储的数据都与文档来源相关联,因为它与正在使用的特定协议(http
或 https
等)、主机(例如 html5doctor.com
) 和端口(usually/implicitly 端口 80
)。
因此,更改源的任何部分都会导致同时更改数据存储上下文。
这是域问题。搭建一个反向代理服务器,把你的真实服务器隐藏在它后面,这样就会出现下面的情况
# Request origin » Actual path
#
localhost/api » localhost:8080/api
localhost/data » localhost:8085/data
现在浏览器只会将 localhost
视为主机,您的应用程序应该可以正常工作。
如果您将其重定向到不同的节点实例,您的会话和本地存储将无法工作,因为这取决于应用程序,在您的情况下,您正在更改重定向的应用程序,因此您的数据将丢失。
我有一个场景,我有一个登录页面(稍后将移至 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。
您还更改了端口,因此,很明显,您正在更改应用程序上下文。
由于 sessionStorage
或 localStorage
依赖于应用程序,您无法从其他上下文访问它们。
由于您是从http://localhost:8080 to http://localhost:8050出发, 这意味着您正在加载另一个 page/document。
因此 localStorage
无法存储您的数据,因为它使用 same-origin
策略来确定对存储数据的访问权限。
任何存储的数据都与文档来源相关联,因为它与正在使用的特定协议(http
或 https
等)、主机(例如 html5doctor.com
) 和端口(usually/implicitly 端口 80
)。
因此,更改源的任何部分都会导致同时更改数据存储上下文。
这是域问题。搭建一个反向代理服务器,把你的真实服务器隐藏在它后面,这样就会出现下面的情况
# Request origin » Actual path
#
localhost/api » localhost:8080/api
localhost/data » localhost:8085/data
现在浏览器只会将 localhost
视为主机,您的应用程序应该可以正常工作。
如果您将其重定向到不同的节点实例,您的会话和本地存储将无法工作,因为这取决于应用程序,在您的情况下,您正在更改重定向的应用程序,因此您的数据将丢失。