关于asp.net Session丢失问题的总结

 
asp Session 是具有进程依赖性的。 ASP Session 状态存于 IIS 的进程中,也就是 inetinfo.exe 这个程序。所以当 inetinfo.exe 进程崩溃时,这些信息也就丢失。另外,重起或者关闭 IIS 服务都会造成信息的丢失。

asp.net Session
的实现
asp.net
Session 是基于 HttpModule 技术做的, HttpModule 可以在请求被处理之前,对请求进行状态控制,由于 Session 本身就是用来做状态维护的,因此用 HttpModule Session 是再合适不过了。

原因 1
bin
目录中的文件被改写, asp.net 有一种机制,为了保证 dll 重新编译之后,系统正常运行,它会重新启动一次网站进程,这时就会导致 Session 丢失,所以如果有 access 数据库位于 bin 目录,或者有其他文件被系统改写,就会导致 Session 丢失

原因 2
文件夹选项中,如果没有打开 在单独的进程中打开文件夹窗口 ,一旦新建一个窗口,系统可能认为是新的 Session 会话,而无法访问原来的 Session ,所以需要打开该选项,否则会导致 Session 丢失

原因 3
似乎大部分的 Session 丢失是客户端引起的,所以要从客户端下手,看看 cookie 有没有打开

原因 4
Session
的时间设置是不是有问题,会不会因为超时造成丢失

原因 5
IE
中的 cookie 数量限制(每个域 20 cookie )可能导致 session 丢失

原因 6
使用 web garden 模式,且使用了 InProc mode 作为保存 session 的方式

解决丢失的经验
1.
判断是不是原因 1 造成的,可以在每次刷新页面的时候,跟踪 bin 中某个文件的修改时间
2.
Session 读写日志,每次读写 Session 都要记录下来,并且要记录 SessionID Session 值、所在页面、当前函数、函数中的第几次 Session 操作,这样找丢失的原因会方便很多
3.
如果允许的话,建议使用 state server sql server 保存 session ,这样不容易丢失
4.
global.asa 中加入代码记录 Session 的创建时间和结束时间,超时造成的 Session 丢失是可以在 SessionEnd 中记录下来的。
5.
如果有些代码中使用客户端脚本,如 javascript 维护 Session 状态,就要尝试调试脚本,是不是因为脚本错误引起 Session 丢失
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值