2011-03-31 66 views

回答

12

ASP.Net会将您的对象存储在服务器内存中的static嵌套字典中。
然后它使用会话ID向客户端发送一个cookie。

下次客户端发送请求时,ASP.Net将从外部字典中检索与该ID关联的会话,然后为您提供包含该会话中对象的内部字典。

(这是默认的会话提供的工作方式;其他供应商可以将对象序列化到SQL Server,或做别的东西完全)

+1

实际上,只有在使用默认的会话存储提供程序时才可以,您还可以使用SQL Server存储会话数据以跨工作进程甚至机器进行共享。 – ntziolis 2011-03-31 19:30:52

+0

是的;这是更高级的功能。 – SLaks 2011-03-31 19:32:21

5

您不会在会话中存储类,而是在这些类的实例中。是的默认会话存储是内存。但是,您也可以将SQL Server用作会话存储。然后会发生一些序列化。

会话数据为而不是可在客户端使用。

1

这取决于你如何在ASP.NET建立会话。默认是会话驻留在服务器的内存中,基本上只是一个字典。用户被给予一个会话cookie,用于识别这些会话字典中的哪一个会抓取给定的请求(每个用户一个会话字典)

对象永远不会发送到客户端,因为客户端只有一个cookie,并且cookie太小而无法容纳任何东西,并且除了向客户端发送对象可能是安全问题。

您可以配置ASP.NET使用一个数据库,而不是内存来存储会话,也就是详细here

1

默认会话存储在内存中。这是最容易使用的,因为对象不一定需要可序列化。

如果您更改会话存储以允许说SQL SERVER数据库。然后,所有存储在会话中的对象都需要可序列化,否则它们将抛出异常。

您的会话默认只会持续20分钟。您可以在web.config中将其更改为只要您想要的时间。但在此之后,垃圾收集将从内存中移除它。