ASP.NET中的会话是如何工作的?

31

请问有人可以建议我如何在asp.net中使用session? 我对session的部分内容感到困惑,希望能简要了解一下,请指导我。


2
请尝试阅读这篇CodeProject文章 http://www.codeproject.com/Articles/32545/Exploring-Session-in-ASP-Net - kfuglsang
2个回答

54
ASP.NET使用cookie来跟踪用户。当您尝试首次写入会话时,将向客户端发送一个类似于ASP.NET_SessionId的cookie。此cookie由客户端在后续请求中发送。由于此cookie,服务器能够识别客户端并读取/写入相关的会话数据。需要注意的是,此cookie不是持久性的(无法在浏览器重启后保存),并带有HttpOnly标记,这意味着客户端脚本无法访问它。
除了cookie之外,您还可以配置ASP.NET在每个请求中使用隐藏字段或将会话ID附加到查询字符串中。
因此,会话背后的基本思想是实际数据存储在服务器上的某个位置,客户端在每个请求中发送一些ID,以便服务器知道在哪里找到其数据。
默认情况下,实际会话数据可以存储在三个位置:
  • In-Proc:会话存储在应用程序的内存中(最快,但如果您有多个服务器在服务器农场中,则无法使用)
  • Out-of-Proc:数据存储在安装了 State 服务的单独服务器中(数据存储在单独计算机的内存中,这意味着多个 Web 服务器可以在 Web 农场中工作)
  • SqlServer:数据存储在 SQL Server 中(速度最慢,但最可靠,因为会话数据存储在 SQL Server 数据库中,如果会话服务器崩溃,数据仍然能够存活,而 Out-Of-Proc 则不行)
  • 自定义实现:由于 ASP.NET 的可扩展性,您可以编写自己的会话提供程序,并将数据存储在任何地方。

这是 MSDN 上一个探讨 ASP.NET Session State 的好文章。


我有一个疑问,假设我在ASP.NET MVC应用程序中创建了一个名为AboutUs的页面,该页面只返回一个View,这是否会为用户请求创建新的会话,或者会话是使用我们应用程序中的代码(例如表单身份验证)创建的? - Shaiju T

4

会话:[存储在服务器端]

1. 如果您创建了会话,服务器将存储您的会话数据并创建一个SessionID。[Session Data with SessionID stored in State Provider in Server]

2. 然后服务器将SessionID返回给客户端浏览器。

3. 您可以将返回的SessionID存储在Cookie中。

4. 下一次请求附带SessionID即可访问服务器数据。

注意:会话仅适用于当前浏览器会话和特定用户。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接