【问题标题】:Different browser means a different client from the same machine不同的浏览器意味着来自同一台机器的不同客户端
【发布时间】:2012-03-14 14:46:56
【问题描述】:
  1. 如果我打开我正在使用的同一浏览器(例如 Firefox)的新选项卡(或窗口),则服务器会将其视为同一客户端。

  2. 但是,如果我从不同的浏览器(例如 IE)打开相同的 URL,则服务器无法将其识别为相同的客户端。

那么,服务器如何在内部识别客户端?

如果我希望服务器在不同的浏览器中唯一标识客户端(而不是将其视为新客户端),我该如何从 Web 服务器(使用 Servlet)中做到这一点?

【问题讨论】:

  • 使用分配给您连接的浏览器的会话 ID。
  • 我认为服务器使用 Cookie 来区分客户端。 Cookie 保存在浏览器上,来自不同浏览器的相同 URL 请求将被视为不同,但来自两个不同 TAB 的 URL 将被视为相同。这可能是众多原因之一。

标签: java servlets browser client-server


【解决方案1】:

“如果我打开我正在使用的同一浏览器(比如 Firefox)的新选项卡(或窗口)”

你的前提不准确。

如果我使用同一浏览器(FireFox 或 Chrome 等)的不同配置文件,它将被视为不同的会话。

这就是我的想法 - 我可以拥有不让服务器或 Web 服务看到我的其他配置文件的隐私。作为用户,我永远不会让您的应用程序越过查询我的其他浏览器或配置文件的那条线。此外,FF、Chrome、Safari、IE 等的 cookie 不共享相同的存储架构。

当然,您可能会花费大量时间来尝试破解一个可以在浏览器之间交换 cookie 的桌面应用程序 - 但这毫无用处,因为

  • 您将如何解密这些 cookie?
  • 您愿意为所有操作系统编写相同的应用程序
  • 那么你将如何说服我相信你让你在我的系统上安装那个 cookie 入侵应用程序?

您最好将时间花在行业公认的流行做法上。

但是,如果您的应用程序具有用户登录/身份验证,那么我希望您的应用程序能够识别我和我的历史记录,无论我在哪台 PC、哪个配置文件或世界的哪个地方。

因此,您的问题的答案是 - 用户身份验证。

您不应该在服务器周围乱搞以跨多台 PC 或浏览器“会话”识别相同的会话 ID。它变得结实、多毛且笨拙。

不要重新发明轮子。使用 OpenID 或 OAuth2。

OpenID-consumer 实现起来非常简单。虽然很简单,但关于实现 openID 的文献示例并不多。但是 Google 已经提供了足够多的关于 OAuth 的有用文献。

Google 联合登录/OAuth 也非常有趣且易于实现。即使使用 GWT。

问题仍然存在 - 当我只想在多个“浏览器会话”之间共享会话时,为什么还要让用户身份验证复杂化。原因是安全。即使是公司内部申请。您认为您的经理是否想知道公司中的任何人都可以伪装他们的会议。

当您深入到项目中时,您会意识到试图逃避用户身份验证路线是没有意义的。并且没有必要创建自己的安全会话身份验证框架。

【讨论】:

    【解决方案2】:

    从技术上讲,这应该是不可能的。服务器通过在客户端上设置 cookie 来识别客户端,并且浏览器不共享它们的 cookie(它们只在选项卡之间共享它们,这就是为什么您会看到不同的选项卡被视为同一个客户端的原因)。您可以尝试通过 IP 地址进行识别,但是代理后面的所有客户端都会错误地被识别为同一个客户端。 任何其他唯一标识客户端的方式都涉及从机器获取信息(例如 MAC 地址),并且出于安全原因,不允许浏览器这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-26
      • 2017-06-25
      • 1970-01-01
      • 2014-10-05
      • 1970-01-01
      • 1970-01-01
      • 2022-08-08
      • 1970-01-01
      相关资源
      最近更新 更多