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

本文探讨了ASP的Session机制及其依赖进程特性,分析了IIS进程崩溃或重启导致Session丢失的问题。同时深入讨论了ASP.NET中Session的实现方式及可能丢失的原因,包括bin目录文件更改、客户端设置不当等,并提供了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

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

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

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

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

解决丢失的经验
1.
判断是不是原因1造成的,可以在每次刷新页面的时候,跟踪bin中某个文件的修改时间
2.
Session读写日志,每次读写Session都要记录下来,并且要记录SessionIDSession值、所在页面、当前函数、函数中的第几次Session操作,这样找丢失的原因会方便很多
3.
如果允许的话,建议使用state serversql 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、付费专栏及课程。

余额充值