2

我有一个登录页面(稍后将移至 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(或者在这种情况下是 localhost 的端口)时,会话/本地存储是否有专门的限制?

4

5 回答 5

4

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

由于sessionStorageorlocalStorage依赖于应用程序,因此您无法从另一个上下文访问它们。

于 2015-02-02T07:05:20.673 回答
2

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

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

于 2015-02-02T07:13:55.380 回答
1

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

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

现在浏览器只将localhost其视为主机,您的应用程序应该按预期工作。

于 2015-02-02T07:40:13.177 回答
0

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

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

于 2015-02-02T07:08:15.647 回答
0

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

于 2016-02-10T07:58:18.837 回答