首页 文章

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

提问于
浏览
36

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

我读了这个

5 回答

  • 54

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

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

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

    如果您的网址如下所示:

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

    无 cookie 的 URL 如下所示:

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

    其中lit3py55t21z5v55vlm25s55是会话 ID。

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

  • 26

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

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

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

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

  • 16

    如今它可以是两者。

    服务器会话

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

    客户会话

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

  • 3

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

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

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

  • 2

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

相关问题