Http 为什么有时我们需要在数据库中存储会话?

Http 为什么有时我们需要在数据库中存储会话?,http,session,tcp,Http,Session,Tcp,我被告知,在数据库中存储会话的一个常见原因是使其跨服务器。但是,TCP连接在关闭浏览器之前不会持久吗?为什么下一个请求可能会切换到其他服务器?您将会话存储在数据库中,以便在对应用程序进行负载平衡时,负载平衡器可以将您的请求转发到服务器场中的任何服务器,并且仍然可以正确访问您的会话数据 对网页的单个请求将转到单个服务器。下次用户发出请求时,将创建一个新的TCP连接,并将其发送到服务器场中的其他服务器。您将会话存储在数据库中,以便在对应用程序进行负载平衡时,负载平衡器可以将您的请求转发到服务器场中的

我被告知,在数据库中存储会话的一个常见原因是使其跨服务器。但是,TCP连接在关闭浏览器之前不会持久吗?为什么下一个请求可能会切换到其他服务器?

您将会话存储在数据库中,以便在对应用程序进行负载平衡时,负载平衡器可以将您的请求转发到服务器场中的任何服务器,并且仍然可以正确访问您的会话数据


对网页的单个请求将转到单个服务器。下次用户发出请求时,将创建一个新的TCP连接,并将其发送到服务器场中的其他服务器。

您将会话存储在数据库中,以便在对应用程序进行负载平衡时,负载平衡器可以将您的请求转发到服务器场中的任何服务器,并且仍然可以正确访问会话数据

对网页的单个请求将转到单个服务器。下次用户发出请求时,将创建一个新的TCP连接,并可将其发送到服务器场中的其他服务器

但是,TCP连接在关闭浏览器之前不会持久吗?为什么下一个请求可能会切换到其他服务器

一旦加载了网页,并且检索了所有的图像、css文件和其他资产,TCP连接不久就会关闭(例如,在Apache2.2中)。当用户单击其他内部链接时,将打开一个新的TCP连接。在多服务器、负载平衡的场景中,这可能会在另一台服务器上结束

但是,TCP连接在关闭浏览器之前不会持久吗?为什么下一个请求可能会切换到其他服务器


一旦加载了网页,并且检索了所有的图像、css文件和其他资产,TCP连接不久就会关闭(例如,在Apache2.2中)。当用户单击其他内部链接时,将打开一个新的TCP连接。在多服务器、负载平衡的情况下,这可能会在另一台服务器上结束。

浏览器中的页面加载通常是无状态的(即,页面完全加载后,它们不会存储状态)

这意味着您的下一个页面加载(可能与从购物目录页面到购物车页面一样简单)是一个单独的HTTP“事务”

事实上,一个页面的文本和它的12个图像(以及400个色情广告)可能都会进入一个完全独立的服务器(即使它们使用相同的基本URL),因为它们可能在不同的TCP会话上运行

您不希望串行化所有通信,以便可以重复使用单个TCP会话,通常在单独的会话上并行执行这些操作会更快

所以它可能会在一个完全不同的服务器上结束,是的。在这种情况下,您可能希望将状态存储在某种类型的共享资源(如数据库)中


还有其他方法可以解决这个问题(总是有的),比如基于IP的亲和性,来自同一IP地址的流量将倾向于使用同一台服务器,但这种方式与您可爱的负载平衡体系结构背道而驰:-)

浏览器中的页面负载通常是无状态的(即,一旦页面完全加载,它们就不会存储状态)

这意味着您的下一个页面加载(可能与从购物目录页面到购物车页面一样简单)是一个单独的HTTP“事务”

事实上,一个页面的文本和它的12个图像(以及400个色情广告)可能都会进入一个完全独立的服务器(即使它们使用相同的基本URL),因为它们可能在不同的TCP会话上运行

您不希望串行化所有通信,以便可以重复使用单个TCP会话,通常在单独的会话上并行执行这些操作会更快

因此,它可能会在一个完全不同的服务器上结束,是的。在这种情况下,您可能希望将状态存储在某种类型的共享资源(如数据库)中


还有其他方法可以解决这个问题(总是有的),比如基于IP的亲和性,来自同一IP地址的流量将倾向于使用同一台服务器,但这与您所有可爱的负载平衡架构背道而驰:-)

Oops…我认为TCP连接的生存期与浏览器窗口相同..单个TCP会话的生存期甚至可能不适用于单个“页面”-有可能,甚至有可能,许多会话将并行运行,以下载核心页面、每个图像或javascript src或其他任何可以转移到另一个会话以提高效率的内容。哎呀……我认为TCP连接的生存期与浏览器窗口相同。单个TCP会话的生存期甚至可能不适用于单个“页面”-有可能,甚至有可能,许多会话将并行运行,以下载核心页面和每个图像或javascript src,或任何其他可以转移到另一个会话以提高效率的内容。