调试过程中Session丢失问题的解决

在近期开发程序的过程了,放弃了微软自带的membership。登录采用了form验证。并为了用户信息的保存方便和数据库压力的减轻,采用的Session存储数据。

可是在调试的过程中发现Session发生了错误,返回的值都是自定义捕捉错误后返回的值。经过研究发现是Session丢失了。于是对Asp.net中的Session机制进行了研究。

对于Session的失效或者丢失,那么具体出现这种情况的问题主要有:
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的时间设置是不是有问题,会不会因为超时造成丢失

那么关于调试过程中Session丢失的问题,最大的可能性就是原因1,经过反复实验,确定丢失的原因是第一个。

这个时候就必须对Session中存储的值是否是我们需要的值进行判断。

以此类推,在以前部署或者跟新网站的过程中也发生过用户输入的信息丢失,最后发现不是丢失,而是将该用户的ID存储成了-1(一般对Session读取出现错误时返回的值),那么可能就是更新的过程中发生的Session丢失。由于问题并没有重复发生,所以并没有在意,现在这样的问题再次出现,该引起重视了。

所以,在对网站或者项目进行更新的过程中,最好采用彻底断线更新,避免此类问题发生。另外对每次Session读取后进行必要的值范围判断也是非常有必要的。

转载于:https://www.cnblogs.com/tishifu/archive/2006/12/08/586801.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值