2012-02-24 47 views
2
  1. 如果我打开我的工作在同一个浏览器的一个新的选项卡(或窗口)(说Firefox)的不同的客户端,然后它会被认为是由同一个客户端服务器。不同的浏览器是指在同一台机器

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

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

如果我想要一个服务器甚至从不同的浏览器(而不是认为它是一个新的客户端)唯一标识一个客户端,我该如何从Web服务器(使用Servlets)做到这一点?

+0

使用会话ID分配给您连接的浏览器。 – Shahzeb 2012-02-24 05:37:00

+0

我认为服务器使用Cookies来区分客户端。 Cookie在浏览器中保留,来自不同浏览器的相同URL请求将被视为不同,但来自两个不同TAB的URL将被视为相同。这可能是许多原因之一。 – JProgrammer 2012-02-24 05:38:17

回答

3

“如果我打开我的工作在同一浏览器的新选项卡(或窗口)(说Firefox)的”

你的前提是不准确的。

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

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

当然,你可以花大量的时间,试图破解了一个桌面应用程序,将浏览器之间交换Cookies - 但是这将是无用的,因为

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

您的时间将会更好用于行业接受和普遍的做法。

但是,如果你的应用有用户登录/验证,那么我会想你的应用程序来认识我和我的历史,无论哪台PC,哪个配置文件,或者世界我在的一部分。

因此,你的问题的答案是 - 用户认证。

您不应该在服务器周围处理多个PC或浏览器“会话”以识别相同的会话ID。它会变得柔软,毛茸茸,杂乱。

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

OpenID消费者实现起来非常简单。尽管简单,但在实现openID方面没有太多的文献例子。但Google已经在OAuth上提供了大量有用的文献资料。

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

问题依然存在 - 为什么我想在用户身份验证过程中将问题复杂化,当我需要的是跨多个“浏览器会话”共享会话时。原因是安全。即使它是内部公司应用程序。你认为你的经理人想知道公司里的任何人都可以伪装他们的会话吗?

当你深入到你的项目中时,你会意识到试图逃离用户认证路线是没有意义的。并且没有必要掀起你自己的安全会话认证框架。

2

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