session老是丢失的问题
有谁能帮我讲讲session老是丢失的问题吗?我的项目发布到网上前段时间运行很好,今天突然session疯狂丢失,登录上去才半分钟就丢失了。
项目使用了ifrom框架,ajax控件,session设置了2个小时,空间是服务商的,有明白的达人请求帮助。
------解决方案--------------------我的解决办法:
第一步:创建一个空白页面AutoRefresh.aspx,在<HEAD></HEAD>加入
<script type="text/javascript">setTimeout("location.href='AutoRefresh.aspx' ",120000)</script>
120000代表2分钟自动刷新一次
第二步:将这个页面'AutoRefresh.aspx' 用框架包含到显示的主页面内就可以了
<iframe width="1" height="1" src="AutoRefresh.aspx"></iframe>
这个方法已经用了很久了,我在后台用户监控用户状态,发现有的用户竟然连续在线14多个小时,多用于需要持续在线的管理系统,我们的用户没有反映过掉线的情况
------解决方案--------------------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丢失
http://tonyqus.cnblogs.com/archive/2006/04/19/378904.html
------解决方案--------------------有可能是空间商的服务器的问题,IIS挂了太多网站了,如果都共用一个应用程序池的话,网站多了肯定会出现这种情况。
建议个空间商联系下,给你的网站新建一个程序池
如果还出现这样的问题,那你就检查下你的程序中资源是否都释放!
------解决方案--------------------session丢失原因很多,例如更新了程序,修改了电脑时间等等。
建议在保存session值的时候同时也插入到数据库或保存到cookies中,页面一开始的时候判断session是否为null,当为null的时候再次从数据库或cookies中再次获取并赋值,这样就ok了
------解决方案--------------------Session在服务器负担一重的情况下就会被操作系统移除,也就是你说的的丢失,最好的办法是采用Cookie的方式存储一些数据。