{转}Session丢失原因与解决方案小结

来源:互联网 发布:电路设计软件pertel 编辑:程序博客网 时间:2024/05/09 14:03
导读:
  {转}Session丢失原因与解决方案小结Posted on 2005-07-25 16:47 树花心岁阅读(151) 评论(0) 编辑 收藏收藏至365Key所属分类: asp.net
  
  
  Posted on 2005-05-13 15:50 冰戈 阅读(650) 评论(4) 编辑 收藏
  可能的原因1:
  
  win2003 server下的IIS6默认设置下对每个运行在默认应用池中的工作者进程都会经过20多个小时后自动回收该进程,造成保存在该进程中的session丢失。
  
  因为Session,Application等数据默认保存在运行该Web应用程序的工作者进程中,如果回收工作者进程,则会造成丢失。
  
  解决办法:
  
  修改配置,设置为不定时自动回收该工作者进程,比如设置为当超出占用现有物理内存60%后自动回收
  
  该进程。通过使用默认应用程序池,可以确保多个应用程序间互相隔离,保证由于一个应用程序的崩溃不会影响另外的Web应用程序。还可以使一个独立的应用程序运行在一个指定的用户帐号特权之下。
  
  如果使用StateServer方式或者Sql Server数据库方式来保存Session,则不受该设置的影响。
  
  可能的原因2:
  
  系统要运行在负载平衡的 Web 场环境中,而系统配置文件web.config中的Session状态却设置为InProc(即在本地存储会话状态),导至在用户访问量大时,Session常经超时的情况。引起这个现象的原因主要是因为用户通过负载平衡IP来访问WEB应用系统,某段时候在某台服务器保存了Session的会话状态,但在其它的WEB前端服务器中却没有保存Session的会话状态,而随着并发量的增大,负载平衡会当作路由随时访问空闲的服务器,结果空闲的服务器并没有之前保存的Session会话状态。
  
  解决办法:
  1.当您在负载平衡的 Web 场环境中运行 ASP.NET Web 应用程序时,一定要使用 SqlServer 或 StateServer 会话状态模式,在项目中我们基于性能考虑并没有选择SqlServer模式来存储Session状态,而是选择一台SessionStateServer 服务器来用户的Session会话状态。我们要在系统配置文件web.config中设置如下:
  
  
  还要添加一项
  
  
  2. 我们同时还要在SessionStateServer 服务器中启动ASP.NET State Service服务,具体设置:控制面板>>管理工具>>服务>>ASP.NET State Service,把它设为自动启动即可。
  
  3. 每台前端WEB服务的Microsoft“Internet 信息服务”(IIS)设置
  要在 Web 场中的不同 Web 服务器间维护会话状态,Microsoft“Internet 信息服务”(IIS) 配置数据库中 Web 站点的应用程序路径(例如,/LM/W3SVC/2)与 Web 场中所有 Web 服务器必须相同。大小写也必须相同,因为应用程序路径是区分大小写的。在一台 Web 服务器上,承载 ASP.NET 应用程序的 Web 站点的实例 ID 可能是 2(其中应用程序路径是 /LM/W3SVC/2)。在另一台 Web 服务器上,Web 站点的实例 ID 可能是 3(其中应用程序路径是 /LM/W3SVC/3)。因此,Web 场中的 Web 服务器之间的应用程序路径是不同的。我们必须使Web 场Web 站点的实例 ID 相同即可。你可以在IIS中把某一个WEB配置信息保存为一个文件,其他Web 服务器的IIS配置可以来自这一个文件。您如果想知道具体的设置请访问Microsoft Support网站:
  
  
  
  补充一些相关资料:
  PRB: Session Variables Are Lost If You Use FRAMESET in Internet Explorer 6.0
  http://support.microsoft.com/kb/323752/EN-US/#
  
  PRB: Session Data Is Lost When You Use ASP.NET InProc Session State Mode
  http://support.microsoft.com/?id=324772
  
  PRB:如果您使用 SqlServer 或 StateServer 会话模式 Web 场中会丢失会话状态
  http://support.microsoft.com/default.aspx?scid=kb;zh-cn;325056
  ************
  cookies异常也可能导致session丢失
  ASP.NET Session State FAQ
  http://www.eggheadcafe.com/articles/20021016.asp

本文转自
http://www.cnblogs.com/clongge/archive/2006/04/21/380953.html