ASP.NET 的Session State

1.Session的本质
每一个用户和web application交互过程被称为Session.
为了可以给每个Session存取一些信息,出现了Session state机制,SessionState实际上就是一个
在seesion 的生命周期中可以读写的hashtable或dictionary(在ASP时代,这个数据结构存放在内存中),
Session[”Stocks”] =” “; //写
string stockString = Session[”Stocks”];//读

如何区分不同用户的session state呢? 在ASP时代,每一个用户在session开始时会得到一个key,
这个key会被存在cookie中,每一个用户请求都会把这个key也发给server,server就能根据这个key
找到该用户对应的session state.

2.局限
以上是session最初的实现机制,很快,这个实现就被发现有如下的局限性
[1] ASP session state存放在asp的工作进程中,如果进程崩溃,或被回收,session state将丢失
[2] ASP session state存放在asp的工作进程中,所以在使用server farm的情况下,一个server上
的用户的session 信息在另一个server将不可用.
[3] 用户可能禁止cookie,这会导致session state不可用

3.ASP.NET的session state
ASP.NET支持3种session state的存储方式.
[1] in-process 和asp的session state兼容,Session Value被存放在ASP.net 的工作进程的内存中.
ASP.NET的工作进程为: aspnet_wp.exe或w3wp.exe(win 2003)

web.config的写法
<configuration>
<sessionstate mode=”inproc” timeout=”20″ />
</configuration>

[2] state server
session 会被存在state server上一个名为aspnet_state.exe的service的内存中,这个service是一个独立的进程,
可以运行在和IIS不同的机器上, 防止工作进程崩溃后session丢失.
首先要启动 service : net start aspstate
再在web.config中设定mode,server, port
<configuration>
<sessionstate mode=”stateserver”
cookieless=”false”
timeout=”20″
server=”127.0.0.1″
port=”42424″ />
</configuration>

[3] sql server
session会被存在sql server中,用于支持server farm
首先要安装相应的数据库,sql脚本存在于Microsoft.NET/Framework/[version]/
osql -S [server name] -U [user] -P [password] <InstallSqlState.sql

或执行

Microsoft.NET/Framework/[version]//aspnet_regsql -S ./sql2k5 -E -ssadd -sstype p

再在web.config中设定mode,server, port
<configuration>
<sessionstate mode=”sqlserver”
cookieless=”false”
timeout=”20″
sqlconnectionstring=”data source=MySqlServer; user id=<…>; password=<…>”/>
</configuration>

同时ASP.NET还实现了无cookie的 session state访问.
ASP.NET通过ISAPI filter修改了URL,
http://localhost/(lit3py55t21z5v55vlm25s55)/Application/SessionState.aspx
这样就相当于提供了cookie.
–如何根据一个原始的用户请求来修改URL呢?

参考资料

ASP.NET Session State(2000)***

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspnet/html/asp12282000.asp

Underpinnings of the Session State Implementation in ASP.NET(Dino Esposito 2003.9)*****

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/aspnetsessionstate.asp

.NET Framework Developer’s Guide: Session State

PRB: Session State Is Lost in Web Farm If You Use SqlServer or StateServer Session Mode
http://support.microsoft.com/default.aspx?scid=kb;en-us;325056

Working on a Web Farm(1999)
http://www.microsoft.com/mind/0699/basics/basics0699.asp

How to create keys by using Visual Basic .NET for use in Forms authentication
http://support.microsoft.com/kb/313091/

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值