会话是存储在客户端还是服务器端

时间:2011-07-12 14:17:09

标签: asp.net asp.net-mvc-3

我想知道HttpContext.Session是否使用Cookie来存储数据。一位同事告诉我,在手机网站上,手机通常没有cookie,因此你没有会话。我一直认为会话是存储在服务器端的数据,不依赖于客户端对象,请解释我是否错了。

我看了this

5 个答案:

答案 0 :(得分:53)

在ASP.NET中;你有一个会话cookie。此cookie用于识别哪个会话属于您;但实际上并不包含会话信息。

默认情况下,ASP.NET会将会话信息存储在工作进程(InProc)内部的内存中,通常为w3wp.exe。还有其他存储会话的模式,例如Out of Proc和SQL Server。

ASP.NET默认使用cookie;但如果你真的需要,可以配置为“无cookie”;而是将您的会话ID存储在URL本身中。这通常有几个缺点;例如链接的维护变得困难,人们为具有过期会话ID的URL添加书签(因此您需要处理过期的会话ID等)。大多数现代手机,甚至是非智能手机,都支持cookies。较旧的手机可能没有。您是否需要支持无cookie会话取决于您。

如果您的网址如下所示:

  

http://www.example.com/page.aspx

无Cookie的网址如下所示:

  

http://www.example.com/(S(lit3py55t21z5v55vlm25s55))/page.aspx

其中lit3py55t21z5v55vlm25s55是会话ID。

您可以详细了解ASP.NET的会话状态here

答案 1 :(得分:25)

会话数据存储在服务器上,但它也会在cookie中存储id字符串以识别用户。

如果不支持cookie,则无法存储id字符串,并且当用户发出另一个请求时,服务器无法配对会话。

会话ID只是服务器生成的数字(来自计数器或随机),因此它不包含您存储在会话对象中的数据中的任何信息。

(该应用程序还可以配置为将会话放在URL而不是cookie中。这使您可以使用没有cookie的会话,但它会破坏您的网址。)

答案 2 :(得分:15)

现在它可以是两者。

服务器会话

服务器端会话已在其他帖子中说明。会话存储在服务器上,但它需要一个cookie来存储指示谁正在请求会话值。

客户端会话

W3C定义的WebStorage的新概念显示了如何在需要时进行客户端会话。 这是WebStorage的HTML5实现: https://code.google.com/p/sessionstorage/

答案 3 :(得分:3)

这在某些方面是一个棘手的问题,因为它有点兼顾。

会话状态本身存储在服务器上。但是,您需要在客户端上使用某种类型的指示器才能使用它。通常,这是一个服务器cookie,它非常薄,基本上是会话的GUID,仅此而已。但是,您可以设置站点以在URI中传递会话ID,因此它不必是cookie。

不确定手机如何处理会话cookie概念,但由于我可以登录,并且在URI中看不到ID,我认为有一种机制,即使它不处理用户cookie。

答案 4 :(得分:2)

会话ID默认存储为cookie。您还可以将会话配置为将其id作为查询参数传递(“cookieless”)。