【发布时间】:2021-12-17 06:10:59
【问题描述】:
在一个 HTML5 网络应用程序中,我正在构建一个依赖于客户端到客户端通信的功能(使用推送器)。它由服务器端的 PHP 和客户端的 Vue 组成。
典型的场景是:打开一个弹出窗口,并从那里直接与打开到同一计算机上的另一个浏览器任何的其他一些窗口进行通信。假设您安装了 2 个浏览器,您使用 Firefox 打开网络应用弹出窗口,它与您之前在 Chrome 中打开的网络应用姊妹页面进行通信。
到目前为止,我们发现的唯一(半)方法是使用公共 IP 地址来构建一个以 IP 地址命名的私有通道……它是基本且高效的。
但是,如果有超过 1 台计算机连接到同一个路由器,那么它们都将共享同一个公共 IP,这就是问题所在!
一种解决方案可能是将计算机的本地 IP 添加到频道名称(已使用公共 IP 构建),但是尽管我发现了一些不错的解决方法来从启动的 RTC 连接中获取此信息,但这看起来很不可靠并且经常违反浏览器的隐私规则……
显然,我不能在服务器端使用 PHP 的会话信息,也不能在客户端使用 cookie/本地存储,因为所有这些解决方案都与浏览器本身紧密耦合(感谢上帝 Chrome 不会共享它的 cookie在您的计算机上使用 Firefox)。如果我们使用 1 个浏览器,这些解决方案将是完美的(并且不需要推送器),但我们需要在同一台机器上处理多个浏览器。
这就是我想知道是否有人已经处理过这个设计挑战并分享了一些技巧,这太棒了!感谢您到目前为止的阅读!
【问题讨论】:
-
thank God Chrome won't share its cookies with Firefox on your computer- 我想你在这里回答你自己的问题。浏览器独立运行是有充分理由的。作为服务器,您所拥有的只是浏览器发送的内容,并且鉴于所有内容都可以由用户控制,因此它并不完全可靠。最终,我想我会问; 为什么你不能使用会话?要求每个浏览器登录,并使用用户名/等在服务器端将会话绑定在一起。我经常使用两个浏览器因为我想要单独的会话。任何可以绕过的东西都会让我担心。 -
只是为了排除它......有什么理由不通过网络服务器使用 websockets?你在做什么特别需要点对点连接?
-
Server Sessions 与 Chrome / Firefox 无关,因此如果您希望 Chrome / Firefox 被视为一台主机。一个想法是,在您的第一个浏览器中,您为用户提供了生成服务器端的唯一参考,让他们能够保存他们可以下载的某种密钥文件,从第二个浏览器为用户提供加载密钥文件的选项。密钥文件可能具有某种加密/ShaSum,因此无法劫持会话。如果您使用 SessionStorage 而不是 LocalStorage 会更好,您可以将来自多个选项卡/浏览器的多个窗口视为单独或连接的主机。
-
这背后的想法是为支持团队提供一种解决方案,以便在客户共享屏幕时自动隐藏私人/敏感数据。它工作得很好,但如果我们不能将此行为限制在单个最终用户计算机上,它将隐藏其他用户的数据......
-
好吧,为什么他们需要属于同一台计算机?为什么不让它们属于同一个用户?
标签: javascript php html ip