ASP.NET Session State


是在那个时候使用:


应用程序状态,存储可以访问一个ASP.NET应用程序的所有用户的变量.

Profile属性,在数据存储中持续用户变量不会过期.

ASP.NET caching,存储一个值在内存中让使用的ASP.NET应用程序使用

查看state,在页面上持续值.


Cookies.


使用给HTTP请求在一个HTML上查询字符和域.

Session变量被存储在一个SeesionStateItemCollection对象同过HttpContext.Session属性类暴露.在一个ASP.NET页面上,当前的session变量是通过Page对象的Session暴露出来的.

session变量的集合被变量名或一个integer index所索引.Session变量的创建是以来Session的变量名.你不声明一个session变量或明确添加进集合中.下面的事例显示怎样创建session变量.

Session[
" FirstName " =  FirstNameTextBox.Text;
Session[
" LastName " =  LastNameTextBox.Text;


其实Session变量能是任何.NET Framework的类型.下面谈的是存储一个ArraryList对在session变量.名为StockPicks.变量返回值是当你从SessionStateItemCollection中找到它时,StockPicks session变量必须被给出适当的类型.

ArrayList stockPicks  =  (ArrayList)Session[ " StockPicks " ];

//  Write the modified stock picks list back to session state.
Session[ " StockPicks " =  stockPicks;




Cookieless SessionIDs


SessionID值是被存储在浏览中cookie中未过期的session.但你能指定一个seesion不存储在一个cookie中,你可以在Web.config中设置session state的cookieless属性.为true.

< configuration >
  
< system.web >
    
< sessionState cookieless = " true "
      regenerateExpiredSessionId
= " true "   />
  
</ system.web >
</ configuration >


ASP.NET 就会维持一个非cookie 的session state,按照自动插入一个唯一session ID进入页面的URL.下面URL将你的ASP.NET的唯一session ID改为:lit3py55t21z5v55vlm25s55:

http://www.example.com/(S(lit3py55t21z5v55vlm25s55))/orderform.aspx

当ASP.NET发送一个页面到浏览器,修改任何页面连接,使用一个应用程序相关路径中嵌入session ID value.如此修改后Session state就能持续很长时间.可是,如果客户端提供应用程序重写URL.ASP.NET可能不能确保sessionID能取到当前的session.

当seession ID被嵌入URL之后消除应用程序名和之前保留文件和虚拟路径标记.授权ASP.NET在请求中执行SessionStateModule之前去溶入应用程序名.


Regenerating Expired Session Identifiers


在session ID值被使用在cookieless sessions中被反复使用.如果一个请求制造一个SessionID值已经过期,一个新的session开被SessionID值所使用来提供给这个请求.当一个包括cookieless SessionID值的连接被多个浏览器使用时这个能让结果在一个session无意中被分享.(如果连接通过 a search engine, an e-mail message, or another program这种情况就会触发)你能通过应用程序的配置来来减少这session数据被共享的机会.设置sessionState配置文件中的regenerateExpiredSessionID属性设置为true.这样当一个cookieless session请对过期session ID时就会产生一个新的session ID.


Custom Session Identifiers


你能时下思念一个自定义类提供和验证SessionID值.这样做创建一个类能继承SessionIDManager类和重写CreateSessionID和Validate方法.

你能创建一个类实现ISessionIDManager接口取代SessionIDManager类.例如.你能在Web Application结合使用一个ISAPI过滤,过滤一个非ASP.NET页面(非HTML页面或images)上的唯一标记.你能使用自己定义 SessionIDManager类来为ASP.NET session state定义唯一标记.如果你的自定义类支持cookieless session 标记,你必须为在URL中发送session和接收session标记实现一个解决.


Session Modes


ASP.NET session state 支持为session变量几个存储选项,每一个选项标识是一个session-state Mode 类型.默认行为是存储session变量在ASP.NET工作者的进程的内存储空间中.你还能指定session state存储在分离的进程中,在一个SQL Server 数据库中,或在自定义数据源.如果你不要这样的session state授权到你的应用程序,你可以设置session mode 为Off.



Session Events


ASP.NET提供两事件来帮助管理你的sessions.这个Session_OnStart事件是控制当一个session开始时被调用,并且Session_OnEnd事件是在当session被放弃或过期时调用.Session 事件被指定在Global.asax文件里面.

如果session Mode属性被设置为非InProc,InProc是默认mode,这个Session_OnEnd事件不被支持.

Configuring Session State

Session state 可以使用system.web配置部分的sessionState元素来配置.你能还能使用在@Page中的EnableSessionState来配置session state.

这个sessionState元素授权你指定下面选项:

    是在session存储数据方式.
    session标记值在服务端与客户端之间发送的方式.
    session超时值.
    支持基于session Mode设置值.

下面实现配置sessionState:
< sessionState  mode ="SQLServer"
  cookieless
="true "
  regenerateExpiredSessionId
="true "
  timeout
="30"
  sqlConnectionString
="Data Source=MySqlServer;Integrated Security=SSPI;"
  stateNetworkTimeout
="30" />


你能不授权session state,只要设置sesssion-state mode为Off.若你只是需要对应用程序的一个页面不授权session state.你能设置EnableSessionState值为false,EnableSessionState值还能设置为ReadOnly.是提供read-only访问session 变量.


Concurrent Requests and Session State


访问ASP.NET session state独占每一个session,就是如果两不同的用户产生并发请求,访问每一个单独的session被认为是并发.可是,如果两个并发请求产生同一个session,(使用同一个sessionID值),在首先请求的首先得到唯一访问session信息.第二个请求执行的只能在第一个去请求访问结束后得到(第二个session才能得到访问.因为如果第一次请求已经超时,锁住信息就被释放.)如果在@Page中的EnableSessionState设置为ReadOnly,一个请求read-only session的信息,在锁住Session数据时没有返回结果,可是,read-only请求session数据也许仍然在等待一个已琐的read-write请求的session 数据被清出.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值