ASP.NET中的Session解析(一)
一、理解Session机制:
Session是一种用于服务器端状态管理的机制,服务器使用一种键值对的结构来保存信息。当程序需要为某个客户端的请求创建一个Session的时候,服务器首先检查这个客户端的请求里是否已包含了一个Session标识 - 称为 Session id,如果已包含一个Session id则说明以前已经为此客户端创建过Session,服务器就按照Session id把这个 Session检索出来使用。在ASP.NET中,默认情况下这个Session id会存储在客户端浏览器的cookie 中,默认情况下如果不对Session做任何写操作的话,客户端是不存储这个Session id的,可以通过在页面拖一个button,不要对Session做任何写操作,然后在Click事件中打印Session.SessionID,当单击button时每次SessionID都是不同的。
protected void Button1_Click(object sender, EventArgs e)
{
Response.Write(Session.SessionID);
}
这说明服务器端的Session id都是重新创建的。
Session id的存储方式有以下四种
1、AutoDetect
Web.config做相应的配置如下:
<system.web>
<sessionState cookieless="AutoDetect">
</sessionState>
</system.web>
ASP.NET 确定请求浏览器或请求设备是否支持 Cookie。如果请求浏览器或请求设备支持 Cookie,则 AutoDetect 使用 Cookie 来保留用户数据;否则,将在查询字符串中使用一个标识符。如果浏览器或设备支持 Cookie,但当前禁用了 Cookie,则请求功能仍会使用 Cookie(也就是禁止不了Session所用的Cookie,这一点我有点疑惑,我禁止掉ie的Cookie,但仍然可以使用Session)。
2、UseCookies
Web.config做相应的配置如下:
<system.web>
<sessionState cookieless="UseCookies">
</sessionState>
</system.web>
无论浏览器或设备是否支持 Cookie,都使用 Cookie 来保留用户数据。
3、UseDeviceProfile
Web.config做相应的配置如下:
<system.web>
<sessionState cookieless="UseDeviceProfile">
</sessionState>
</system.web>
ASP.NET 根据 HttpBrowserCapabilities 设置来确定是否使用 Cookie。如果 HttpBrowserCapabilities 设置指示浏览器或设备支持 Cookie,将使用 Cookie;否则,将在查询字符串中使用一个标识符。
4、UseUri
Web.config做相应的配置如下:
<system.web>
<sessionState cookieless="UseUri">
</sessionState>
</system.web>
无论浏览器或设备是否支持 Cookie,调用功能都使用查询字符串来存储标识符。这时候ASP.NET会将Session id存放在地址栏中,当访问某个写了Session的页面时,地址栏会变成:
http://localhost:1237/WebSite6/(S(vyn3bk55h4a03w455vjiwj21))/default4.aspx
这时候你可以去打印Session id,你会发现Session id=vyn3bk55h4a03w455vjiwj21。
二、ASP.NET中Session的存储模式有以下五种:
1、Custom
会话状态将使用自定义数据存储区来存储会话状态信息。
2、InProc
会话处于正在处理 ASP.NET 辅助进程的状态。
3、Off
会话状态被禁用。
4、SQLServer
会话状态将使用进程外 SQL Server 数据库来存储状态信息。
5、StateServer
会话状态将使用进程外 ASP.NET 状态服务来存储状态信息。
参考:
http://www.cnblogs.com/netflu/archive/2008/12/24/1361560.html
http://www.codeproject.com/KB/aspnet/ExploringSession.aspx
作者:Lance
出处:http://www.cnblogs.com/nuaalfm/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述