知识大全 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.Net Session超时的问题

ASP.NetSession超时的问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &

知识大全 Asp.net中处理一个站点不同Web应用共享Session的问题

Asp.net中处理一个站点不同Web应用共享Session的问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一

知识大全 Asp.net的Session过期

Asp.net的Session过期  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  目录删除及重命

知识大全 ASP.Net的Session

ASP.Net的Session  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ASPNet中的S

知识大全 ASP.NET会话(Session)模式

ASP.NET会话(Session)模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 ASP与ASP.NET转换Session数据桥的应用

ASP与ASP.NET转换Session数据桥的应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 ASP.NET中的session存储模式运用

ASP.NET中的session存储模式运用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在中

知识大全 ASP.NET Session 详解

ASP.NETSession详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  阅读本文章前需要

知识大全 Asp.Net中NHiernate的Session的管理

Asp.Net中NHiernate的Session的管理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下