sessionState与会话
HTTP 是一种无状态协议。这意味着 Web 服务器会将针对页面的每个 HTTP 请求作为独立的请求进行处理。ASP.NET 会话状态将来自限定时间范围内的同一浏览器的请求标识为一个会话,并提供用于在该会话持续期间内保留变量值的方法。默认情况下,将为所有 ASP.NET 应用程序启用 ASP.NET 会话状态。当用户在 Web 应用程序中导航 ASP.NET 页时,ASP.NET 会话状态使您能够存储和检索用户的值。
在阅读完MSDN的文档后个人对会话状态的关注点有标识符,模式还有事件。
Session标识符
Seesion在鄙人大学时学习ASP.NET WebForm的时候就接触到,当时是以Page类的内置对象来介绍。当时结合这里的理解,Session对象实际上是用于保存一个会话中所需要保留下来的值的一个字典集合。而在服务器中接受了多个用户的访问请求后,会产生多个会话,这些会话对应的Session也是以一个字典集的形式保存起来。Session内的值对应的标识符是由开发人员自己定义,而每个Session对象的标识符是由一个SessionIDManager来提供,这个SessionIDManager可以开发自己定义。服务器每次接受到一个请求时,都会检查这个请求中是否带了会话的标识符,默认是存储在cookie中的ASP.NET_SessionId,如果没有则通过SessionIDManager的CreateSessionID方法创建一个,然后响应的时候把这个SessionIDManager告诉浏览器,那么以后每次发请求的时候都会带着这个ASP.NET_SessionId的Cookie发到服务端,表明这一系列的请求都属于一个会话。
当在 Web.config 文件的 sessionState 节中将 cookieless 属性设置为 TRUE或UseUri,可以指定不将会话标识符存储在 cookie 中。ASP.NET 通过自动在页的 URL 中插入唯一的会话 ID 来保持无 cookie 会话状态。例如,下面的 URL 已被 ASP.NET 修改,以包含唯一的会话 ID lit3py55t21z5v55vlm25s55:

但凡使用了这种形式的Session配置时,在将每页发送到浏览器之前,在链接中嵌入一个会话 ID 值。只要用户遵循 ASP.NET 应用程序提供的链接路径,即可保持会话状态,否则像平时的把请求重定向或者或者跳转到某个URL时,

如上面所示因缺乏SessionId而使得服务器判定为一个新的会话,最终导致丢失了之前会话的状态。
默认情况下会回收无 cookie 会话中使用的会话 ID 值。即如果使用已过期的会话 ID 发起一个请求,将使用此请求提供的 SessionID 启动一个新的会话。将 sessionState 配置元素的 regenerateExpiredSessionId 属性设置为 true。这样,在使用已过期的会话 ID 发起无 cookie 会话请求时,将生成一个新的会话 ID。如果使用 HTTP POST 方法发起使用已过期会话 ID 的请求,则当 regenerateExpiredSessionId 为 true 时,将丢失发送的所有数据,因为 ASP.NET 会执行重定向,以确保浏览器在 URL 中具有新的会话标识符。但对于现在的Web系统而言会话过期都会导致请求时认证失败,重定向到登录页面,此时肯定会丢失所有提交的数据。
Session模式
ASP.NET 会话状态支持若干用于会话数据的存储选项。其通过web.config/sessionState中的mode属性设置,包含InProc(进程内),StateServer(状态服务器),SQLServer(SQL Server数据库模式),Custom(自定义模式),Off(禁用)
进程内模式:进程内模式是默认的会话状态模式,进程内模式将会话状态值和变量存储在本地 Web 服务器上的内存中。个人估计它是存储在工作进程(w3wp.exe)内。它是唯一支持 Session_OnEnd 事件的模式。
1.状态服务器模式:StateServer 模式将会话状态存储在一个称为 ASP.NET 状态服务的进程中,该进程是独立于 ASP.NET 辅助进程或 IIS 应用程序池的单独进程。使用此模式可以确保在重新启动 Web 应用程序时保留会话状态,并使会话状态可用于网络场中的多个 Web 服务器。
若要使用 StateServer 模式,必须首先确保 ASP.NET 状态服务运行在用于存储会话的服务器上。ASP.NET 状态服务在安装 ASP.NET 和 .NET Framework 时作为一个服务进行安装。ASP.NET 状态服务安装在以下位置:

比如我系统的.NET Framework4的状态服务在

stateConnectionString 属性设置为 tcpip=服务器名称:42424。
2.SQL Server模式:SQLServer 模式将会话状态存储到一个 SQL Server 数据库中。使用此模式可以确保在重新启动 Web 应用程序时保留会话状态,并使会话状态可用于网络场中的多个 Web 服务器。
若要将某个 ASP.NET 应用程序配置为使用 SQLServer 模式,请在该应用程序的 Web.config 文件中执行以下操作:

在命令提示符中输入以下命令

效果如下图所示

完成后发现数据库中有一个ASPState的数据库,包含表两张和若干个存储过程

用于存储session值的表示ASPStateTempSessions,当我们访问一个页面打开一个会话的时候,就往里面写入了一条数据

个人估计字段[SessionItemShort]和[SessionItemLong]就是存储Session值
3.自定义模式:Custom 模式指定您希望使用自定义会话状态存储提供程序来存储会话状态数据。在使用 Custom 的 Mode 配置 ASP.NET 应用程序时,必须使用 sessionState 配置元素的 providers 子元素指定会话状态存储提供程序的类型。使用 add 子元素来指定提供程序类型,并包括指定提供程序类型名称的 type 属性以及指定提供程序实例名称的 name 属性。然后,将提供程序实例的名称提供给 sessionState 元素的 customProvider 属性,将 ASP.NET 会话状态配置为使用该提供程序实例来存储和检索会话数据。具体实现的话可以参考两个地方查看《会话状态存储提供程序示例 》和《如何:演示会话状态存储提供程序》
Session事件
Session事件有两个:Session_OnStart 事件和 Session_OnEnd 事件;前者在新会话开始时引发,后者在会话被放弃或过期时引发。如需使用则定义在全局文件Global.asax里面则可,但是Session_OnEnd 事件只有在会话模式是InProc,也就是使用进程内模式。
后记
最后粘贴一下整个sessionState的配置节

sessionState与会话的更多相关文章
- 你必须牢记的*.Config-配置文件
在我们第一次写web应用程序的时候,我们很快会接触到一个文件,那就是配置文件——web.config.我们的第一个比较深刻 的使用就是我们不需要把我们的数据库链接零散的写在我们的代码中了,我们只需要在 ...
- ASP.NET中Session的sessionState 4种mode模式
1. sessionState的4种mode模式 在ASP.NET中Session的sessionState的4中mode模式:Off.InProc.StateServer及SqlServer. 2. ...
- WCF初探-26:WCF中的会话
理解WCF中的会话机制 在WCF应用程序中,会话将一组消息相互关联,从而形成对话.会话”是在两个终结点之间发送的所有消息的一种相互关系.当某个服务协定指定它需要会话时,该协定会指定所有调用(即,支持调 ...
- 快速入门系列--WCF--02消息、会话与服务寄宿
经过WCF基础的ABC学习,已经可以构建简单的WCF的服务,使用不同的服务地址和绑定类型,根据业务提供所需的服务契约.但不禁想问,服务所使用的消息报文是什么样的形式么?蕴含什么样内容呢?WCF服务是否 ...
- .net用SQL Server进行session会话管理
保存在内存中的session经常由于dll的变动导致丢失.有一种方法可以长期保存session,那就是session的SqlServer模式. ASP.NET允许将会话数据存储到一个数据库服务器中,方 ...
- Asp.net 实现Session分布式储存(Redis,Mongodb,Mysql等) sessionState Custom
对于asp.net 程序员来说,Session的存储方式有InProc.StateServer.SQLServer和Custom,但是Custom确很少有人提及.但Custom确实最好用,目前最实用和 ...
- SessionState详解 session有效期时间:默认20分
为当前应用程序配置会话状态设置. configuration 元素(常规设置架构) system.web 元素(ASP.NET 设置架构) sessionState 元素(ASP.NET ...
- 解决ASP.NET 自定义报表部署到IIS浏览时出现ASP.NET会话已结束问题
进到公司开始接触的项目就要做报表,原系统使用的是水晶报表,但是水晶报表展示方面美观方面不怎么好需客户需要美化一下.自定义报表与水晶报表之前都没有接触过,自己先学了一下这两种报表,后面觉得自定义报表设计 ...
- .net中SessionState相关配置
web.config关于sessionState节点的配置方案,sessionState有四种模式:off,inProc,StateServer,SqlServer. 1.off模式 从字面上就可 ...
随机推荐
- 一张图解释SQL Server集群、镜像、复制、日志传送
一张图解释SQL Server集群.镜像.复制.日志传送 本文版权归作者所有,未经作者同意不得转载.
- CYQ.Data.Orm.DBFast 新增类介绍(含类的源码及新版本配置工具源码)
前言: 以下功能在国庆期就完成并提前发布了,但到今天才有时间写文介绍,主要是国庆后还是选择就职了,悲催的是上班的地方全公司都能上网,唯独开发部竟不让上网,是个局域网. 也不是全不能上,房间里有三台能上 ...
- ASP.NET Identity V2
Microsoft.AspNet.Identity是微软在MVC 5.0中新引入的一种membership框架,和之前ASP.NET传统的membership以及WebPage所带来的SimpleMe ...
- ABP理论学习之发布说明
返回总目录 查看更详细信息以及下载源代码请查看原文档 ABP v0.9.2.0 | [更新日期:2016/6/6 11:21:28 ] 解决方案转换成xproj/project.json格式. 添加了 ...
- 探索C#之虚拟桶分片
阅读目录 背景 虚拟桶(virtual buckets) 实现 总结 背景 关于数据分片讨论最多的是一致性hash,然而它并不是分布式设计中的银弹百试百灵. 在数据稳定性要求比较高的场景下它的缺点是不 ...
- TCP状态
TCP状态 TCP连接中包含不同的状态,如何通过状态来判断程序问题尤为重要. 三次握手 图中的connection部分为三次握手. 四次握手 图中的close部分为四次握手. CLOSE_WAIT 服 ...
- JavaScript状态机程序逻辑编辑器
制作背景 之前做Win8 Metro动态加载内容框架的时候,由于采用了XAML+JavaScript的方法,程序复杂的执行逻辑是由JavaScript控制的,而页面一多,流程一复杂,制作起来就非常麻烦 ...
- 垃圾回收机制GC知识再总结兼谈如何用好GC
一.为什么需要GC 应用程序对资源操作,通常简单分为以下几个步骤: 1.为对应的资源分配内存 2.初始化内存 3.使用资源 4.清理资源 5.释放内存 应用程序对资源(内存使用)管理的方式,常见的一般 ...
- 在drawable 画胶囊状
<solid android:color="@color/colorAccent"></solid> <corners android:radius= ...
- CSS移动端多行显示多余省略号
/*css3 多行显示省略号,也可用于单行*/ .one-line { display: -webkit-box; overflow : hidden; text-overflow: ellipsis ...