.NET Session丢失解决方案与问题原因分析

.NET Session丢失解决方案与问题原因分析

判断Session是否过期:
通过BasePage或IHtttpMoudle实现
由于Asp.net程序是默认配置,所以Web.Config文件中关于Session的设定如下:

< sessionState mode='InProc' stateConnectionString='tcpip=127.0.0.1:42424'

sqlConnectionString='data source=127.0.0.1;Trusted_Connection=yes'

cookieless='true' timeout='60'/>

我们会发现sessionState标签中有个属性mode,它可以有3种取值:InProc、StateServer?

SQLServer(大小写敏感)。默认情况下是InProc,也就是将Session保存在进程内(IIS5是

asp教程net_wp.exe,而IIS6是W3wp.exe),这个进程不稳定,在某些事件发生时,进程会重起

,所以造成了存储在该进程内的Session丢失。

哪些情况下该进程会重起呢?微软的一篇文章告诉了我们:

1、配置文件中processModel标签的memoryLimit属性

2、Global.asax或者Web.config文件被更改

3、Bin文件夹中的Web程序(DLL)被修改

4、杀毒软件扫描了一些.config文件。

public class BasePage : System.Web.UI.Page
    {
      public  BasePage()
      {

      }

      protected override void OnInit(EventArgs O)
      {
          if (base.Session["UserId"] == null || base.Session["UserId"].ToString

().Equals(""))
          {
              Response.Redirect("~/Error.aspx");
          }
      }
    }

if(Session["user"]==null)
{
this.Response.Redirect("Error.aspx");
}
 asp.net教程-session-lost.html">url:http://greatverve.cnblogs.com/archive/2011/06/28/asp-net-session-lost.html

<customErrors mode="RemoteOnly" defaultRedirect="Error.aspx">
</customErrors>
Session丢失问题解决方案总结:

1  <sessionState mode="InProc" cookieless="false" timeout="60"></sessionState>
 这个是可以解决超时问题的,但是这个极不安全,vs.net默认设置
 相当于把session交给IIS的进程管理,IIS的不稳定性将导致Session频繁丢失
 
2 sessionState mode=StateServer是建立独立的Session的服务进程管理方式模式,
 这样不受IIS的进程本身的不稳定影响,不容易导致session丢失,
 这样可以实现多个asp.net的站点的session 共享。

在web.config文件中设置mode属性为StateServer外,要启动 管理工具-服务-ASP.NET

state service 项了。还必须设置运行StateServer服务器的IP地址和端口号.如 果在IIS所

在的机器运行StateServer则IP地址就是127.0.0.1,端口号通常是42424.配置如下:
  <sessionState mode=”StateServer”
  stateConnectionString="tcpip=127.0.0.1:42424".....>
  使用这种模式,会话状态的存储将不依赖IIS进程的失败或者重启,会话的状态将存储在

StateServer进程的内存空间中。

3 SQLServer模式。这种模式是将会话的状态保存在SQL Server数据库教程中的。使用这种模式

前,必须至少有一台SQL Server服务器,并在服务器中建立需要的表和存储过程。.NET SDK

提供了两个脚本来简化这个工作:InstallSqlState.sql和UnInstallSqlState.sql。这两国

文件存放在下面路径 中:

  <%SYSTEMDRIVER%>WinntMicrosoft.NETFramework<%version%>
  要配置SQL Server 服务器,可以在命令行中运行SQL Server提供的命令行工具

osql.exe
  osql -s [server name] -u [user] -p [password] <InstallSqlState.sql
  例如:osql -s (local) -u as -p “”-i InstallSqlState.sql
  做好必要的数据库准备工作后,将web.config文件中的sessionstate元素的mode属性改

为”sqlserver”,并指定SQL连接字符串。具体如下:
  mode="SQLServer"
  sqlConnectionString="data

source=127.0.0.1;userid=sa;password=;Trusted_Connection=yes"
  使用SQLServer模式处了可以使Session的状态不依赖于IIS服务器之外,还可以利用SQL

Server的集群,使状态存储不依赖于单个的SQL Server,这样就可以为应用程序提供极大的

可靠性

关于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是再

合适不过了。

原因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的方式

时间: 2024-10-22 00:57:03

.NET Session丢失解决方案与问题原因分析的相关文章

iis与tomcat整合公用80端口,session丢失

问题描述 参照做法:http://www.360doc.com/content/13/0705/17/12039584_297873358.shtml不知道是我配置上的问题还是什么原因导致的!一登陆显示登陆成功,再次跳转的时候session就丢失了 解决方案 解决方案二:这样混搭的好处是啥呢解决方案三:引用1楼defonds的回复: 这样混搭的好处是啥呢 客户只有一台服务器,上面iis已经挂了好几个站点了.又用java开发了一个web,域名只能指定到80端口,所以需要整合解决方案四:别让帖子沉了

ASP.NET中Session丢失原因与解决方案小结

win2003 server下的IIS6默认设置下对每个运行在默认应用池中的工作者进程都会经过20多个小时后自动回收该进程,造成保存在该进程中的session丢失. 因为Session,Application等数据默认保存在运行该Web应用程序的工作者进程中,如果回收工作者进程,则会造成丢失. 解决办法: 修改配置,设置为不定时自动回收该工作者进程,比如设置为当超出占用现有物理内存60%后自动回收该进程.通过使用默认应用程序池,可以确保多个应用程序间互相隔离,保证由于一个应用程序的崩溃不会影响另

ASP.NET技巧:Session丢失原因与解决方案小结

asp.net|session|技巧|解决 win2003 server下的IIS6默认设置下对每个运行在默认应用池中的工作者进程都会经过20多个小时后自动回收该进程,造成保存在该进程中的session丢失. 因为Session,Application等数据默认保存在运行该Web应用程序的工作者进程中,如果回收工作者进程,则会造成丢失. 解决办法: 修改配置,设置为不定时自动回收该工作者进程,比如设置为当超出占用现有物理内存60%后自动回收该进程.通过使用默认应用程序池,可以确保多个应用程序间互

win2003 server下的IIS Session丢失原因与解决方案小结

win2003 server下的IIS6默认设置下对每个运行在默认应用池中的工作者进程都会经过20多个小时后自动回收该进程,造成保存在该进程中的session丢失. 因为Session,Application等数据默认保存在运行该Web应用程序的工作者进程中,如果回收工作者进程,则会造成丢失. 解决办法: 修改配置,设置为不定时自动回收该工作者进程,比如设置为当超出占用现有物理内存60%后自动回收 该进程.通过使用默认应用程序池,可以确保多个应用程序间互相隔离,保证由于一个应用程序的崩溃不会影响

ASP.NET Session丢失问题原因及解决方案

正常操作情况下会有ASP.NET Session丢失的情况出现.因为程序是在不停的被操作,排除Session超时的可能.另外,Session超时时间被设定成60分钟,不会这么快就超时的. 现在我就把原因和解决办法写出来. ASP.NET Session丢失原因: 由于Asp.net程序是默认配置,所以Web.Config文件中关于Session的设定如下: <sessionState mode='InProc' stateConnectionString='tcpip=127.0.0.1:424

ASP.NET Session丢失问题原因及解决方案[转]

不得不老调重弹 正常操作情况下会有ASP.NET Session丢失的情况出现.因为程序是在不停的被操作,排除Session超时的可能.另外,Session超时时间被设定成60分钟,不会这么快就超时的. 现在我就把原因和解决办法写出来. ASP.NET Session丢失原因: 由于Asp.net程序是默认配置,所以Web.Config文件中关于Session的设定如下: < sessionState mode='InProc' stateConnectionString='tcpip=127.

ASP.NET状态服务及session丢失问题解决方案总结

原文:ASP.NET状态服务及session丢失问题解决方案总结[转载]asp.net Session的实现: asp.net的Session是基于HttpModule技术做的,HttpModule可以在请求被处理之前,对请求进行状态控制,由于Session本身就是用来做状态维护的,因此用HttpModule做Session是再合适不过了. ASP.NET中Session的状态保持方式 ASP.NET提供了Session对象,从而允许程序员识别.存储和处理同一个浏览器对象对服务器上某个特定网络应

ASP.NET Session丢失原因和应对策略

正常操作情况下会有ASP.NET Session丢失的情况出现.因为程序是在不停的被操作,排除Session超时的可能.另外,Session超时时间被设定成60分钟,不会这么快就超时的. 现在我就把原因和解决办法写出来. ASP.NET Session丢失原因: 由于Asp.net程序是默认配置,所以Web.Config文件中关于Session的设定如下: <sessionState mode='InProc' stateConnectionString='tcpip=127.0.0.1:424

转 两次hbase丢失数据的故障及原因分析--hbase split过程

hbase的稳定性是近期社区的重要关注点,毕竟稳定的系统才能被推广开来,这里有几次稳定性故障和大家分享.     第一次生产故障的现象及原因     现象:       1 hbase发现无法写入       2 通过hbck检测发现.META.表中出现空洞,具体log            是:;Chain of regions in table ...  is broken; edges does not contain ...       3 此时读写失败       修复方法:直接使用c