ASP.NET 中的 Session对象
You reap what you sow.
一份耕耘,一份收获。
通过Cookies存储的数据不安全,因此需要一个更安全的存储对象----Session对象。
1、Session单词含义
Session
[ˈseʃn] 一场,一节。在这里可以翻译成会话。
牛津: a period of time that is spent doing a particular activity
2、Session 概述
Session通常指一个用户登录网站到注销退出网站所经过的时间。也就是说Session本质上是个时间概念。
一个用户请求Web服务器的时候,服务器为了保存用户的状态,封装了一个Session对象,在浏览器请求后相应回去。面对多个用户,为了便于区分,给每个浏览器传送的Session对象都是不一样的,用Session对象的SessionID 属性来记录。
Session和Cookies是有联系的。如果一个浏览器不支持或者禁用了Cookies,那么Session将无法起作用。Session和Cookies本质是一样的,区别是Session是建立在服务端的,Cookies是建立在浏览器端的。
由于Session对象是存在服务器的内存中的,为了节约性能,Session对象都有生命周期属性:Session.Timeout
超过设定的时间,就会自动将改对象遗弃。
3、Session的存储和读取
可以像 窗体变量集合 一样存储:
Session["KeyName"] = value; //通过键名存储
Session[0] = value; //通过索引存储
和存储一样的格式去读取:
Object.value = Session["KeyName"];
Object.value = Session[0];
例子:在Load事件中存储用户的身份证号。存储完成后跳转到UserInfo界面。
protected void Page_Load(object sender, EventArgs e){
Session["userCard"] = "41302619991011xxxx";
Response.Redirect("UserInfo.aspx");
}
4、Session 对象的属性和方法
4.1、Session对象的常用属性
属性名称 | 说明 |
---|---|
Timeout | 获取或设置会话状态终止前各种请求之间所允许的时间 |
SessionID | 获取会话的唯一标识符 |
IsCookieless | 获取一个值。该值指示会话嵌入URL中还是存储在HTTP Cookie中 |
Mode | 获取会话的状态模式 |
Keys | 获取存储在会话中所有键的集合 |
IsNewSession | 获取一个值。该值指示会话是否与当前请求一起创建的 |
4.2、Session对象的常用方法
方法名称 | 说明 |
---|---|
Abandon() | 取消当前对话 |
Add() | 向会话状态集合添加一个新项 |
Clear() | 从会话状态集合中移除所有键和值 |
4.3、设置Session销毁的时间
Session 采取滚动计时的方式。若开发者打开并写入Session ,从写入开始,该页面如果一直没有提交操作,则20分钟后,Session就会被服务器自动销毁。如果有提交操作,服务器会在提交后重新计时,以此滚动。
可一通过以下两种方法设置Session。
方法一:
Session["userName"] = "Miss.Zhang";
Session.Timeout = 30;
方法二:
<system.web>
<sessionState mode="OFF|Inprox|StateServer|SQLServer"
cookieless="true|false"
timeout="number of minutes"
stateConnectionString="tcpip=server:port"
sqlConnectionString="sql connection string"
stateNetworkTimeout="number of seconds"
/>
</system.web>
-
mode
存哪里,默认存在IIS进程内。OFF表示不使用Session功能,InProc表示存在IIS进程中,StateServer 表示将Session存在ASP.NET状态服务进程中。SQLServer表示将Session存储在服务器磁盘中,服务器挂掉重启后都还在。 -
cookieless
默认值是false,客户端的Session值存在哪; -
timeout
服务器多少分钟后放弃Session信息,默认20min; -
stateConnectionString
mode值为State Server的时候的必需属性。状态服务存储所在服务器的名称和端口号,例如"tcpip=127.0.0.1:42424"
其中42424是默认端口号。 -
stateConnectionString
mode值为SQL Server的时候的必需属性。 -
stateNetworkTimeout
设置使用StateServer模式存储,Session断开后,经过多少秒后TCP/IP断开。默认值是10秒。
例子: 设置Session失效时间为20分钟。
<system.web>
<sessionState timeout="20" />
</system.web>