欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » ASP.Net » 正文

热门阅读

ASP.NET HttpApplication 属性 Session(HttpSessionState)详解

创建时间:2011年08月03日 16:39  阅读次数:(5248)
分享到:
·MSDN:提供对会话状态值以及会话级别设置和生存期管理方法的访问。 

·类型:System.Web.SessionState.HttpSessionState 

·ASP.NET 提供了会话状态管理,使您可以根据多种请求存储与唯一浏览器会话相关联的信息。 您可以存储由键名或数字索引引用的值的集合。 您可以使用 HttpSessionState 类访问会话值和功能,该类可通过当前 HttpContext 的 Session 属性或 Page 的 Session 属性进行访问。 

·会话数据通过唯一标识符与特定浏览器会话相互关联。 默认条件下,该标识符存储在浏览器的不过期会话 Cookie 中,但是您也可以在应用程序配置的 sessionState 元素中,将 cookieless 特性设置为 true 或 UseUri,以此方法配置应用程序,将会话标识符存储在 URL 中。 您可以通过指定 cookieless 特性的 UseDeviceProfile 值,让 ASP.NET 确定浏览器是否支持 Cookie。 您也可以为 cookieless 特性指定 AutoDetect 值,让 ASP.NET 确定是否为浏览器启用 Cookie。 如果指定 UseDeviceProfile 后浏览器支持 Cookie,或指定 AutoDetect 后浏览器启用了 Cookie,则会话标识符将存储在 Cookie 中;否则它将存储在 URL 中。 

·第一次请求过程中会话将会启动,并且在达到 Timeout 属性中指定的分钟数之前如果浏览器未发送新的请求,当前的会话值将持续有效。 新会话开始后将引发会话 Start 事件。 会话启动时您可以使用此事件执行任何其他工作,例如设置默认会话值。 如果会话超时,将调用 Abandon 方法,或者关闭 ASP.NET 应用程序,此时将引发会话 End 事件。 您可以使用此事件执行任何必要的清理操作。 仅当会话状态 mode 被设置为 InProc 时,才引发 End 事件。 

·若要提高性能,只有数据确实存储在 Session 对象中后,使用 Cookie 的会话才会分配会话存储。
 
·会话状态的持续性不会跨越 ASP.NET 应用程序的边界。 如果浏览器定位到另一应用程序,则当前的会话信息对新应用程序不再有效。 

·默认条件下,会话值存储在 Web 服务器的内存中。 您也可以把会话值存储在 SQL Server 数据库、ASP.NET 状态服务器或自定义服务器中。 一旦 ASP.NET 或 IIS 进程或 ASP.NET 应用程序重新启动,这种举措可以保存会话值,并且它还可以使会话值在网络场的所有服务器间可用。 要配置这种行为,请在应用程序配置的 sessionState 元素中把 mode 特性设置为有效的 SessionStateMode 值。
 
·会话状态可能会过期(默认情况下,在处于不活动状态 20 分钟后过期),而在其中存储的信息可能会丢失。可以使用 sessionState 配置节的 timeout 属性控制会话状态生存期。 

常用方法和属性: 

常用方法: 
// 向会话状态集合添加一个新项。 
Session.Add(UserNamezz);

// 删除会话状态集合中的项。再次获取时返回 null
Session.Remove(UserName);
Session.RemoveAt(0);

// 从会话状态集合中移除所有的键和值。
Session.Clear();
Session.RemoveAll();

// 取消当前会话,开始新的会话,即一个全新的Session对象
// 注:一般在会话超时时调用,可以设置新的会话是否使用旧SessionID
Session.Abandon();


·诡异方法: 
// 定义一个数组,有长度就行,值无所谓
object[] objs = new object[10];

// 将会话状态值的集合复制到数组中,从数组的指定索引处开始,索引之前的值不变,索引之后的被覆盖
// 数组长度不够将会抛数组越界异常
Session.CopyTo(objs,5);

//怎么填充,怎么取,理论上应该返回值,事实上返回的都是键
object obj5 = objs[5]; 


·常用属性: 
// 按数字索引获取或设置会话值。 Item[Int32] (读写属性)
Session[0] = zz;
object obj1 = Session[0];

// 按名称获取或设置会话值。 Item[String] (读写属性)
Session[UserName] = zz;
object obj2 = Session[UserName];

// 获取会话状态集合中的项数。 
int count = Session.Count;

// 获取存储在会话状态集合中所有值的键的集合。
// using System.Collections.Specialized;
NameObjectCollectionBase.KeysCollection keys = Session.Keys;

// 获取会话的唯一标识符。 
string id = Session.SessionID;

//获取一个值,该值指示会话是否是与当前请求一起创建的。
bool isNewSession = Session.IsNewSession;

//获取一个值,该值指示会话是否为只读。 
bool isReadOnly = Session.IsReadOnly;

//获取一个值,该值指示会话 ID 是嵌入在 URL 中还是存储在 HTTP Cookie 中。 
bool isCookieless = Session.IsCookieless;

//获取一个值,该值指示是否为无 Cookie 会话配置应用程序。默认值为 UseCookies。(只读)
HttpCookieMode hm = Session.CookieMode;

//获取当前会话状态模式。 默认值为 InProc  (只读)
SessionStateMode ssm = Session.Mode;

// 获取并设置在会话状态提供程序终止会话之前各请求之间所允许的时间(以分钟为单位,默认值为 20)。 
int timeOut = Session.Timeout;
秅刧teT0R購*N擽(u z廭-N0<
来源:
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 87+93=? 的结果(结果是:180)
结  果: