Session莫名丢失的解决办法

转载 2006年06月02日 10:25:00

Asp.net 默认配置下,Session莫名丢失的原因及解决办法

我们平时写的asp.net程序,里面要用到Session来保存一些跨页面的数据。但是Session会经常无故丢失,上网查查,也没找到原因。正好当时准备跳槽,也没多少时间来看论坛了。

如今,在新公司还是遇到了这种情况,正常操作情况下Session会无故丢失。因为程序是在不停的被操作,排除Session超时的可能。另外,Session超时时间被设定成60分钟,不会这么快就超时的。

这次到CSDN上搜了一下帖子,发现好多人在讨论这个问题,然后我又google了一下,发现微软网站上也有类似的内容。

现在我就把原因和解决办法写出来。

原因:


由于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是aspnet_wp.exe,而IIS6是W3wp.exe),这个进程不稳定,在某些事件发生时,进程会重起,所以造成了存储在该进程内的Session丢失。

哪些情况下该进程会重起呢?微软的一篇文章告诉了我们:
1、配置文件中processModel标签的memoryLimit属性
2、Global.asax或者Web.config文件被更改
3、Bin文件夹中的Web程序(DLL)被修改
4、杀毒软件扫描了一些.config文件。
更多的信息请参考PRB: Session variables are lost intermittently in ASP.NET applications

解决办法:


前面说到的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=127.0.0.1:42424"属性,其中有个ip地址,默认为本机(127.0.0.1),你可以将其改成你所知的运行了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 State FAQ
ASP.NET Session State
[ASP.NET] Session 详解
PRB: Session Data Is Lost When You Use ASP.NET InProc Session State Mode
PRB: Session Data Is Lost When You Use ASP.NET InProc Session State Mode
ASP.NET HTTP 运行时
.NET 中的对象序列化
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>

Session莫名丢失的解决办法

Asp.net 默认配置下,Session莫名丢失的原因及解决办法我们平时写的asp.net程序,里面要用到Session来保存一些跨页面的数据。但是Session会经常无故丢失,上网查查,也没找到原...
  • coderdream
  • coderdream
  • 2006年06月07日 15:04
  • 1379

session丢失是怎么解决的

原作者:http://www.verydemo.com/demo_c155_i3082.html session丢失是如何解决的 我就知道SESSION容易丢掉,也听说是放到数据库,但是我还是不了...
  • smallson4049
  • smallson4049
  • 2014年05月23日 11:44
  • 298

tomcat跨域以及session丢失的解决方案

公司由于要搞跨域问题,写写大概思路! 一、后台配置。        1.在后台项目中导入:cors-filter-2.5.jar和java-property-utils-1.10.jar。...
  • u011403366
  • u011403366
  • 2016年12月15日 16:52
  • 2348

cas ajax登录方式跨域时session丢失问题解决

问题:在ie浏览器下,域名A通过iframe的方式把登录信息post到域名为B的cas服务器上,经过debug发现A获取loginTicket时的sessionId和post过去时的sessionid...
  • laigood12345
  • laigood12345
  • 2012年08月18日 10:09
  • 5598

Session莫名丢失的原因及解决办法

Asp.net 默认配置下,Session莫名丢失的原因及解决办法正常操作情况下Session会无故丢失。因为程序是在不停的被操作,排除Session超时的可能。另外,Session超时时间被设定成6...
  • xwnxwn
  • xwnxwn
  • 2010年11月14日 21:22
  • 255

php session 丢失的解决方法!

        由于刚接触php本来在本机器上调试都没问题, 但上传到服务器就出来很多问题, 尤其是session的丢失让我很是恼怒,本是很简单的问题,但CSDN上还是有很多人碰到不同的session...
  • hzgood
  • hzgood
  • 2005年07月08日 20:18
  • 7597

关于c# SESSION丢失问题解决办法

我们在用C#开发程序的时候经常会遇到Session很不稳定,老是数据丢失。下面就是Session数据丢失的解决办法希望对您有好处。1、在WEB.CONFIG文件中修改SESSION状态保存模式,如: ...
  • hit040420224
  • hit040420224
  • 2009年06月19日 10:20
  • 467

解决使用tomcat-redis-session-manager httpSessionLinster监听功能失效问题

使用tomcat-redis-session-manager做session redis化有一个坑就是,代码tomcat-redis-session-manager本身对session的生命周期控制使...
  • u011431312
  • u011431312
  • 2017年07月28日 15:16
  • 737

解决跨域访问session丢失问题

问题: 前后端两个项目,前段访问后端api,前段用angularjs  后端用的express,设置res.header("Access-Control-Allow-Origin", “*”);可以...
  • rendiqi
  • rendiqi
  • 2017年08月27日 21:35
  • 845

session丢失问题

郁闷!就在今天-项目验收的日子,居然遇到了session丢失问题,更郁闷的是我居然不知道还有session丢失问题。这样的直接结果就是验收推迟,郁闷阿!现在记录一下:首先是主页面show了一个模态窗口...
  • hxirui
  • hxirui
  • 2006年08月10日 20:09
  • 4791
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Session莫名丢失的解决办法
举报原因:
原因补充:

(最多只允许输入30个字)