如何防止在部署在同一容器中的两个或多个不同应用程序之间传递HTML5本地存储数据

How to prevent passing HTML5 local storage data between two or more different applications which were deployed at the same container?

本文关键字:之间 应用程序 HTML5 存储 数据 部署 何防止 两个      更新时间:2023-09-26

我在用户会话监控方面有很大的问题。我需要在关闭最后一个应用程序选项卡或浏览器关闭后终止会话。

因此,这项工作得以实施。我开发了用于本地存储和会话存储的小型库,并开发了用于监视打开的浏览器选项卡的机制。

只是一个带有制表符计数器的简单对象。

{
    "session_instance_count" : 0
}

以及将此对象写入本地存储的简单方法:

SessionMonitor.prototype.writeValueByKeyToLS = function (key, value){
   var own = this;
   own.getLocalStorageInstance().setItem(key, value);
};
SessionMonitor.prototype.getLocalStorageInstance = function () {
    return 'localStorage' in window && window['localStorage'];
};

但是在将另一个应用程序部署到Tomcat之后,我发现本地存储存在严重问题。来自第一个应用程序的所有存储值在第二个应用程序中都可用。

我在上存储了一些数据http://localhost:8080/app1该数据将在http://localhost:8080/app2

App1发送请求打开带有一些参数的App2

注意:我无权修改第二个应用程序的源代码。

这是我的问题:

如何防止在部署在同一容器中的两个或多个不同应用程序之间传递HTML5本地存储数据?

删除了具有本地存储的解决方案,因为它不提供在具有相同域模式的一个容器内的应用程序之间单独设置数据的可能性。我已经检查了tomcat/conf/server.xml中配置端口的解决方案因此,我们可以为所有部署的应用程序设置不同的端口。或者我们可以为应用程序再注册一个端口

    <Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />
    <Connector port="8086" protocol="HTTP/1.1"
       connectionTimeout="20000"
       redirectPort="8444" />

http://localhost:8080/app2具有http://localhost:8086/app1

本地存储将是唯一的。但我不能使用这个解决方案,因为客户不希望这样。

我找到了另一个解决方案:服务器端和客户端之间的关系。

只是生成唯一的window.name并将其存储在服务器会话中。我希望这对某些人会有帮助。