会议在哪里?

时间:2017-12-25 14:56:42

标签: asp.net session session-cookies session-state application-pool

我最近在学习会话,到目前为止,我了解会话和cookie分别用于服务器端和客户端,以跟踪请求的状态。并且将在服务器上创建一些线程或实例来处理不同的请求,假设来自同一客户端的2个请求 A B ,此客户端的会话已设置在请求 A 主题1 ,请求 B 由另一个主题主题2 处理,显然请求< strong> B 可以从会话中获取信息。这意味着“会话”不存储在某个线程上,在这种情况下不存储在线程1 上,因为请求 B 也可以将信息存储在“会话”中。所以基于上面的场景,我的问题就出现了:

  1. 会话存储在哪里?我假设某个地方可以被所有线程或实例访问。
  2. “会话清单”和应用程序池之间的关系是什么(我在这里指的是IIS和.Net)
  3. 如果我关闭服务器并再次启动它,所有会话都会消失吗?如果我们想要坚持会议,需要哪些技术?

2 个答案:

答案 0 :(得分:0)

  1. 会话数据可以是内存中(在服务器上),也可以是外部的。有关详细信息和选项,请参阅此处:https://msdn.microsoft.com/en-us/library/h6bb9cz9(VS.71).aspx。请注意,也可以自定义该机制,以便存储可以完全专有。

  2. 我从未听说过任何名为“会话库存”的内容。如果将此与ASP.NET的会话管理相关联,则与IIS应用程序池几乎没有关系。应用程序池管理您的应用程序,同时它在IIS中运行。您可以在此处找到更多信息:https://docs.microsoft.com/en-us/iis/configuration/system.applicationhost/applicationpools/

  3. 如果您的应用程序配置为将会话数据存储在内存中(这是默认设置),那么,当应用程序重新启动时,所有数据都将消失(以前发出这些会话ID的用户将无法识别重新开始)。因此,为了解决这个问题,我们通常喜欢使用外部会话存储。会话状态服务器是一个不错的选择,或者是数据库。它很容易配置。请参阅以下步骤:https://msdn.microsoft.com/en-us/library/ms178586.aspx

答案 1 :(得分:0)

简而言之! (我认为你在谈论Native会话。会话状态服务器都不是数据库会话)

  1. 会话存储在Web服务器内存中。
  2. 让我举例说明。很明显,您的网站需要在IIS中托管。如果你想托管3个网站有.net 2.0,3.5和4怎么办?这就是应用程序池的来源。将这些.net 3不同版本安装到IIS。分别使用.net 2.0,3.5和4创建3个不同的应用程序池,并正确设置3个网站。请注意,可以与多个网站共享相同的应用程序池。
  3. 所有会话不仅会关闭服务器,还会重新启动IIS。如果需要持久会话,请使用会话状态服务器或数据库会话管理器。