知识大全 ASP.NET Session丢失问题原因及解决方案
Posted 知
篇首语:认识到自己无知是知识进步的重要阶段。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ASP.NET Session丢失问题原因及解决方案相关的知识,希望对你有一定的参考价值。
ASP.NET Session丢失问题原因及解决方案 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
正常操作情况下会有ASP NET Session丢失的情况出现 因为程序是在不停的被操作 排除Session超时的可能 另外 Session超时时间被设定成 分钟 不会这么快就超时的
现在我就把原因和解决办法写出来
ASP NET Session丢失原因
由于Asp net程序是默认配置 所以Web Config文件中关于Session的设定如下
<sessionState mode= InProc stateConnectionString= tcpip= : sqlConnectionString= data source= ;Trusted_Connection=yes cookieless= true timeout= />
我们会发现sessionState标签中有个属性mode 它可以有 种取值 InProc StateServer?SQLServer(大小 写敏感) 默认情况下是InProc 也就是将Session保存在进程内(IIS 是aspnet_wp exe 而IIS 是W wp exe) 这个进程不 稳定 在某些事件发生时 进程会重起 所以造成了存储在该进程内的Session丢失
哪些情况下该进程会重起呢?微软的一篇文章告诉了我们
配置文件中processModel标签的memoryLimit属性
Global asax或者Web config文件被更改
Bin文件夹中的Web程序(DLL)被修改
杀毒软件扫描了一些 config文件
更多的信息请参考PRB: Session variables are lost intermittently in ASP NET applications
ASP NET Session丢失解决办法
前面说到的sessionState标签中mode属性可以有三个取值 除了InProc之外 还可以为StateServer SQLServer 这两种存Session的方法都是进程外的 所以当aspnet_wp exe重起的时候 不会影响到Session
现在请将mode设定为StateServer StateServer是本机的一个服务 可以在系统服务里看到服务名为ASP NET State Service的服务 默认情况是不启动的 当我们设定mode为StateServer之后 请手工将该服务启动
这样 我们就能利用本机的StateService来存储Session了 除非电脑重启或者StateService崩掉 否则Session是不会丢的(因Session超时被丢弃是正常的)
除此之外 我们还可以将Session通过其他电脑的StateService来保存 具体的修改是这样的 同样还在sessionState 标签 中 有个stateConnectionString= tcpip= : 属性 其中有个ip地址 默认为本机 ( ) 你可以将其改成你所知的运行了StateService服务的电脑IP 这样就可以实现位于不同电脑上的Asp net程序互通 Session了
如果你有更高的要求 需要在服务期重启时Session也不丢失 可以考虑将mode设定成SQLServer 同样需要修改sqlConnectionString属性 关于使用SQLServer保存Session的操作 请访问这里
在使用StateServer或者SQLServer存储Session时 所有需要保存到Session的对象除了基本数据类型(默认的数据类型 如int string等)外 都必须序列化 只需将[Serializable]标签放到要序列化的类前就可以了
如
[Serializable]
public class MyClass
具体的序列化相关的知识请参这里
至此 ASP NET Session丢失问题解决
关于asp net Session丢失问题的总结
asp中Session的工作原理
asp的Session是具有进程依赖性的 ASP Session状态存于IIS的进程中 也就是inetinfo exe这个程序 所以当inetinfo exe进程崩溃时 这些信息也就丢失 另外 重起或者关闭IIS服务都会造成信息的丢失
asp net Session的实现
ASP NET的Session是基于HttpModule技术做的 HttpModule可以在请求被处理之前 对请求进行状态控制 由于Session本身就是用来做状态维护的 因此用HttpModule做Session是再合适不过了
原因
bin目录中的文件被改写 asp net有一种机制 为了保证dll重新编译之后 系统正常运行 它会重新启动一次网站进程 这时就会导致Session丢失 所以如果有access数据库位于bin目录 或者有其他文件被系统改写 就会导致Session丢失
原因
文件夹选项中 如果没有打开“在单独的进程中打开文件夹窗口” 一旦新建一个窗口 系统可能认为是新的Session会话 而无法访问原来的Session 所以需要打开该选项 否则会导致Session丢失
原因
似乎大部分的Session丢失是客户端引起的 所以要从客户端下手 看看cookie有没有打开
原因
Session的时间设置是不是有问题 会不会因为超时造成丢失
原因
IE中的cookie数量限制(每个域 个cookie)可能导致session丢失
原因
使用web garden模式 且使用了InProc mode作为保存session的方式
ASP NET Session丢失问题解决经验
判断是不是原因 造成的 可以在每次刷新页面的时候 跟踪bin中某个文件的修改时间
做Session读写日志 每次读写Session都要记录下来 并且要记录SessionID Session值 所在页面 当前函数 函数中的第几次Session操作 这样找丢失的原因会方便很多
如果允许的话 建议使用state server或sql server保存session 这样不容易丢失
在global asa中加入代码记录Session的创建时间和结束时间 超时造成的Session丢失是可以在SessionEnd中记录下来的
cha138/Article/program/net/201311/14085相关参考
知识大全 ie与session丢失(新窗口cookie丢失)实测及解决方案
正如标题所言测试结果为如果cookie设置是延后定时失效而非进程级的那在open后也能看到所以针对此情况防止用户在使用ie内核出现登录状态丢失可以配合cookie来使用 今天在一个群中有
ASP.NetSession超时的问题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &
知识大全 Asp.net中处理一个站点不同Web应用共享Session的问题
Asp.net中处理一个站点不同Web应用共享Session的问题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一
Asp.net的Session过期 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 目录删除及重命
ASP.Net的Session 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ASPNet中的S
ASP.NET会话(Session)模式 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 ASP与ASP.NET转换Session数据桥的应用
ASP与ASP.NET转换Session数据桥的应用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
ASP.NET中的session存储模式运用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在中
ASP.NETSession详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 阅读本文章前需要
知识大全 Asp.Net中NHiernate的Session的管理
Asp.Net中NHiernate的Session的管理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下