我被告知将会话存储在数据库中的一个常见原因是使其跨服务器。但是,在关闭浏览器之前,TCP连接是否持久?为什么下一个请求可能会切换不同的服务器?我们为什么需要将会话存储在数据库中?
0
A
回答
3
但是,在关闭浏览器之前,TCP连接是否持续存在?为什么下一个请求可能会切换不同的服务器?
一旦网页加载,并且所有图像,css文件和其他资产都被检索到,TCP连接将很快关闭(例如,Apache 2.2中的after 5 seconds by default)。当用户点击其他内部链接时,会打开一个新的TCP连接。这可能会导致多服务器负载均衡场景中的另一台服务器上。
1
将会话存储在数据库中,以便在负载平衡应用程序时,负载平衡器可以将请求转发到服务器场中的任何服务器,并仍然可以正确访问会话数据。
对网页的单个请求将转到单个服务器。下次用户发出请求时,会创建一个新的TCP连接,并可以将其发送到服务器场中的其他服务器。
0
浏览器中的页面加载通常是无状态的(即,页面完全加载后它们不会存储状态)。
这意味着您的下一页加载可能与从购物目录页面到购物车页面一样简单,它是一个单独的HTTP“事务”。
事实上,一个页面及其12个图像(和400个色情广告)的文本可能每个都会转到一个完全独立的服务器(即使它们使用相同的基本URL),因为它们可能使用不同的TCP会话。
您不希望序列化所有流量,以便重新使用单个TCP会话,但在单独的会话上并行执行它们通常会更快。
因此,它可能最终在一个完全不同的服务器,是的。在这种情况下,你会希望存储在某种共享资源(如数据库)中的状态。
还有其他方法可以解决问题(总是存在),例如基于IP的关联,其中来自同一IP地址的流量将优先选择同一台服务器,但面对所有可爱的负载平衡体系结构时,这种苍蝇:-)
相关问题
- 1. 为什么数据不会存储在我的数据库中?
- 2. 将会话存储在数据库中
- 3. 为什么coldfusion不在数据库中存储会话
- 4. 存储库模式 - 为什么我们需要接口?
- 5. 为什么我们需要数据库表中的审核列?
- 6. 为什么会话需要存储在站点服务器上?
- 7. 为什么在maven中需要镜像,而我们可以修改存储库?
- 8. 图数据库:为什么我们需要它?
- 9. 为什么我们需要一个数据库驱动程序?
- 10. 我们是否需要在将会话ID保存到数据库之前加密会话ID
- 11. 为什么我们在创建存储库时需要创建xxxCustom和xxxImpl类?
- 12. 为什么我们需要在数据源中提供密码?
- 13. 为什么我们需要在MongoDB中定义数据模型
- 14. 为什么我们需要使用存储过程?
- 15. 为什么我们需要瞬态故障处理存储?
- 16. 为什么我们需要建议一个变量存储在寄存器中?
- 17. 将会话数据存储在数据库和memcache中
- 18. 什么是数据库中的会话存储?
- 19. 什么是__i686.get_pc_thunk.bx?我们为什么需要这个电话?
- 20. 为什么将oauth 1.0令牌存储在数据库中 - 为什么不只是保持会话呢?
- 21. 需要在Java中存储会话/事务的数据
- 22. 将数据存储在会话中
- 23. nodejs。什么库我应该使用会话存储在MongoDB中
- 24. 什么是仿函数,为什么我们需要它们?
- 25. 为什么我们需要在JavaScript
- 26. 为什么要“将实例类存储在数据库中作为实体”?
- 27. 什么是线程本地存储?我们为什么需要它?
- 28. 为什么我们需要在编译器中分配存储空间
- 29. PHP - 将大会话数组存储在$ _SESSION或数据库中?
- 30. 为什么我需要在我的settings.xml文件中指定一个存储库
糟糕...我以为TCP连接的生命周期与浏览器窗口是一样的.. – powerboy 2010-07-02 01:27:47
单个TCP会话的生命周期甚至可能不是单个“页面” - 这是可能的,甚至很可能,许多会话将并行运行,以便下载核心页面,每个图像或JavaScript src或其他任何可以为了效率而远离另一会话的内容。 – paxdiablo 2010-07-02 01:34:41