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

 

Posted on 2006-04-19 10:33 Tony Qu 阅读(2831) 评论(21)   编辑  收藏 引用 收藏至365Key 所属分类: .NET 1.1 技术
昨天去GTSC面试,有面试官问我关于Session丢失之后怎么查的问题,说老实话,开发到现在很少碰到这样的情况,唯一想到的就是Session超时,还有就是做Session读写日志,发觉面试官听了之后不是很满意,汗!

不管怎么说,是个学习的好机会,今天抽空查了一下网上关于这些问题的处理方法,总结一下,希望对大家有所帮助。

顺便提一下asp中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丢失

参考:
[1] http://jinglecat.cnblogs.com/archive/2005/11/14/275587.aspx
[2] http://www.0dsf.com/bbs/dispbbs.asp?boardID=30&ID=6032&page=5
[3] http://spaces.msn.com/eparg/Blog/cns!1pnPgEC6RF6WtiSBWIHdc5qQ!447.entry
[4] http://jinlinc.cnblogs.com/archive/2005/11/29/287181.aspx
[5] http://blog.joycode.com/ghj/archive/2004/06/23/25521.aspx
[6] http://www.365base.com/Article/343/347/2005/2005091534671.html

大家如果还有其他的经验,可以写在回复中,我会即时更新的

Feedback

# re: 关于asp.net Session丢失问题的总结  回复   

2006-04-19 11:37 by Bear.sTaR{R}
总结的不错,呵呵

# re: 关于asp.net Session丢失问题的总结  回复   

2006-04-19 11:44 by 萧远山
这样才能进步啊...不错!

# re: 关于asp.net Session丢失问题的总结  回复   

2006-04-19 13:04 by 老燕
嗯,人有时候需要外界刺激一下才会激发潜能,:)

# re: 关于asp.net Session丢失问题的总结  回复   

2006-04-19 13:22 by 川仔
这个比较全面了。

# re: 关于asp.net Session丢失问题的总结  回复   

2006-04-19 13:29 by Boler Guo
好,看后很有收获。看来不受刺激是不行了~

# re: 关于asp.net Session丢失问题的总结  回复   

2006-04-19 14:01 by flyye_cs
Session篡位又是怎么发生的呢? 偶碰到过一次,点击注销后(程序会清空当前session),返回首页,居然显示的是别人帐号的信息 (本来应该什么都不显示的) ...... 就碰巧看到过一次!!!!! PS:Session记录的是UserID(唯一的)

# re: 关于asp.net Session丢失问题的总结  回复   

2006-04-19 15:01 by 辉狼
Session存到数据库里便是不是就不容易丢失了?

# re: 关于asp.net Session丢失问题的总结  回复   

2006-04-19 15:27 by 鞠强
不会是熊力面试的你吧?eparg的blog上面有详细地总结

# re: 关于asp.net Session丢失问题的总结  回复   

2006-04-19 20:03 by Tony Qu
@鞠强
不知道呀,我没问面我的几个的名字,只知道面我的manager叫于雯,不过觉得面我的人都很专业的,不愧是GTSC的,佩服佩服

@辉狼
恩,相对于不用数据库的Session应用而言安全些

# re: 关于asp.net Session丢失问题的总结  回复   

2006-04-21 20:10 by Tony Qu
@砖头
虚心接受意见,那你说说我应该怎么总结,我需要的是意见,砖头我不要:p

# re: 关于asp.net Session丢失问题的总结  回复   

2006-04-24 08:56 by 00000000000
还有一种情况,但是是由人为因素造成的

记得有几个页面不小心把页面上的引用using System.Web.SessionState;给删除了,
在运行中发现Session通常莫名其妙的丢失,找了很久也没发现原因
页面也不是每次都出错,因此谁也没有想到为是这个原因造成的

另 没有加该引用页面也不会报错

:)


# re: 关于asp.net Session丢失问题的总结  回复   

2006-04-26 09:15 by 极地银狐.NET
楼主的第三个方法我最支持!呵呵

# re: 关于asp.net Session丢失问题的总结  回复   

2006-04-30 09:41 by Boler Guo
web.config 一变动session好像也要丢失~

# re: 关于asp.net Session丢失问题的总结  回复   

2006-05-09 16:12 by ashuai
re: flyye_cs

1. 可能是服务端将sessionID放在了url里(禁用了cookies)
2. 页面缓存,你碰到的应该是这个

感觉楼主总结的几个方案都会有性能问题,因为session的操作太频繁了!一般对于session的丢失是不会去处理的!

# re: 关于asp.net Session丢失问题的总结  回复   

2006-06-07 13:55 by SPARON
我也出现过SESSION串位情况,但不知怎么回事。

# re: 关于asp.net Session丢失问题的总结  回复   

2006-06-17 12:18 by 凌风
我还遇到一个问题,现在还在困绕我.
我把一个大概有1000条记录的表中数据(该数据程序是已经进行计算过)存放在Session中,我会频繁修改该该Session.问题就出来了.同样的操作,在不同的时候会出现该表Session中DataTable的记录数为0.我没有搞懂是为什么的.如有人指点,在下不胜感激.

# re: 关于asp.net Session丢失问题的总结  回复   

2006-06-20 09:03 by
非常感谢帮我解决了问题

# re: 关于asp.net Session丢失问题的总结  回复   

2006-06-22 14:39 by 幻影杀手
我的程序中有一段删除文件夹的代码,每次执行后seesion就没了,是怎么回事呢?

# re: 关于asp.net Session丢失问题的总结  回复   

2006-07-20 16:24 by grapef
http://spaces.msn.com/eparg/Blog/cns!1pnPgEC6RF6WtiSBWIHdc5qQ!447.entry


难道真的是我面试的?总结的东西跟我blog上的好相似啊

楼主继续努力!

# re: 关于asp.net Session丢失问题的总结  回复   

2006-08-28 17:29 by 曹爷
说有道理。
我现在正好用得着!

# re: 关于asp.net Session丢失问题的总结  回复   

2006-10-05 17:13 by 風林火山
我的程序中有一段删除文件夹的代码,每次执行后seesion就没了,是怎么回事呢?
我也碰到這個問題啊?暈死!
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值