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 中的对象序列化

  • Share/Bookmark

终于到家了

终于到家了。拿到票时我就做好了火车晚点10个小时的准备。结果出人意料的正点到达!!
卧铺真舒服,哈哈,第一次坐。

到上海时是夜里3点,本来想坐夜宵线到一个相对近一点的地方再打车的,后来出站时太冷了,就直接打车回家了。

到了家里,先把床铺好,电热毯开了,然后就把包里的东西整理一下,4点多的时候我就开始睡觉了。

一觉睡到早上10点多,被老婆短信吵醒。起来洗个澡,然后开始洗衣服。在家里买的四件套也洗了,挺好看的,不知道老婆认为怎么样。

昨天第一天上班,地铁里人不多,要是能天天这样就好了。平时乘地铁就像被包饺子。

程序上一个比较烦人的问题被我找到原因了,原来是输入数据的大小写造成的。要不是无意中发现的,恐怕再过一周也搞不定。Gembase里不能实时调试,真是讨厌。

老婆今天开始买回来的火车票,不知道能不能买到,如果周三之前买不到,我就在这边帮她订周六早上的机票。从洛阳到上海只要530,呵呵。

  • Share/Bookmark

今天就回家了

今天回家,票早上才拿到。托了好几个人,才拿到一张临客的票,卧铺下铺,这下还行。反正不怕火车晚点了。现在想起来去年的火车晚点真恐怖。

按照该车的时刻表,4号凌晨2点多到上海,如果真是2点多到,我看还是在车站等到天亮再走吧,要不然怎么办呢?打车回去太贵,那时又没有地铁,只能坐夜宵线了,还不知道夜宵线好不好等,329夜宵线(上海西--提篮桥)。到了再说吧,说不定车正好晚点到早上6点,哈哈,正好了。

东西都收拾好了,3点半出发!!

老婆,快点回家吧。偶想你了……

  • Share/Bookmark

智力题:票到哪儿去了?

一般来说客运火车会有20节左右的车厢,除去卧铺5节,餐车1节,其他的什么发电车等等,至少还要有10节车厢是硬座,每节车厢有117个座位。这样算下来,一列火车最起码硬座票可以卖1170张。我对火车了解不多,就算平均4小时一列火车从终点站出发,每天从一个城市始发的列车就有6辆,这样每天就有6000多张火车票可以卖,这个是最起码的票数。
火车站的售票窗口一般是从零点开始发售10天后的车票,而火车票预售点一般都是早上8点发售10天后的车票。按照前面说的,去火车站买票能买到座位票的概率最大。但往往出现的情况就是,刚到零点,就买不到10天后的车票了,或者刚卖几张,就买不到了。车票呢?去哪儿了?
国家打击黄牛,并没能使火车票难买的问题得到改善,下一步国家将对倒票采取什么措施不得而知,但我希望能刨除各种利益关系,从根源上杜绝倒票,杜绝火车站工作人员中饱私囊的行为。

另外,火车晚点,我认为在目前的技术条件下,应该不会出现这种情况,每列火车配备gps,高性能的计算机在时刻运算,我认为现在都能算出10天之后全国火车的运行情况,怎么会有晚点的现象出现呢?可见做调度工作的人也都是BC。

前段时间看的车次L开头的是临客,A开头的是按需列车,有的铁路工作者说A开头的车比L开头的还不如,但我做过一次A开头的车,感觉还不错,不大晚点,尤其是进京的列车。总比应该在12:45开,但到了下午4点多还晚点未知的L车次好。

我没看过第二代身份证的具体介绍,不过感觉这个身份证应该使用了RFID技术吧,如果使用了,以后买火车票最好能凭身份证购买,火车票实名制,这样估计可以有效地解决倒票问题。

如果有谁看了这篇Blog,同意的就发发感慨,BS我的就当什么都没看过……

  • Share/Bookmark

终于到家了

终于到家了,路上不挤,火车基本上正点到达。

我们是早上8点多出站的,出了火车站要打车回去,结果停在火车站附近的出租车听说我们的目的地离这儿不远,就开口要10元,说是春运火车都涨价了出租车也涨价了,真是无赖啊。我们宁愿多走2分钟,到路上去拦车,结果只花了5块钱。下午就在家睡觉,晚上吃完饭出去洗了个澡。

第二天,我们一家四口去了永乐电器,买个空调,算是我们送给爸妈的新年礼物。我妈听说海信的空调好,我们先去海信的柜台,发现他们的空调上面都挂着直流变频的牌子,以为2千出头就能买直流变频的,觉得很划算,结果细问下来才知道原来挂的样机中只有一款标价2999的是直流变频,其他都是交流变频的,我顿时有种被欺骗的感觉,就放弃了海信这个牌子。最后,我们都看中了春兰的一款空调。制冷量3200W,对于爸妈屋子的14平方应该够了,制热量多少忘记了,这个空调还带电辅助加热。2248元,刷卡买下。信用卡又积了100分啦,这次应该能换一瓶小的芝华氏了。空调下午就送来了。之后,我们在超市里买了点老年人吃的东西,送到外公外婆家,算是孝敬他们的。

第三天,上午师傅来家里装空调。经过一番周折,空调还算顺利的装上了。原打算中午去奶奶家,结果奶奶不在家,我们就去超市给小舅和舅妈还有弟弟买点东西,然后就去了小舅家。在那儿,我吃了最爱吃的刘记的油烫鸭,吃了舅妈做的把子肉和肉圆,还吃了舅妈做的糖醋排骨,呵呵,真好吃。

第四天,早上在家睡觉。我和老婆都爱睡觉,只不过有时她能睡,有时我能睡。下午去海云找张军建。他和几个朋友开了个公司,比较忙,我们到他公司坐会儿,就出来了。两年没到徐州去,不知道哪儿有地方可以免费坐坐,结果就来到了麦当劳。点了两份饮料,坐了一个多小时,然后出去和老婆去看鞋子。后来发现徐州的嘉年华里面可以免费的坐,而且能自带饮料食品,真晕,早发现就不要去麦当劳了。后来我们吃的阿昌烤鱼,大概地址在九州商厦旁边的一条胡同里,从嘉年华出来,向北走,第一条马路右转,马路左边有条胡同,进去就是。那里面的羊肉串真香,烤鱼不愧是招牌菜,真入味。烤鸡翅也不错。这么大的鸡翅只要3元。呵呵,划算阿。

第五天老婆就要走了,真舍不得啊。今天就不写了。

第六天,和好友黄凯见面,先去咖啡厅坐坐,后来又去吃西班牙烤肉。哈哈,爽!!第一次用刀叉吃饭,不习惯,不过后来好了,至少每次都能把肉切断,叉起来沾黑胡椒酱吃。呵呵。下次一定要带老婆去吃豪牛士。前几天晚上帮爸爸做的一个抽奖的程序,领导反映不错,奖励了我一张可以在家乐福购物100元的购物卡,呵呵,赚了。

在上海生活了快2年,感觉那边的服务人员态度都还可以,尤其是大商场里,都很热情。不像徐州,服务员都有些爱理不理的样子。我们去家乐福买东西,商场只开放了部分存包柜,不知是何用意。我问那边存包处的人,柜子满了怎么办。结果白我一眼,说:等!要是在上海,他们肯定会看看我手里的包,然后说你个包可以带进去。还有,我们去市中心的一个售楼处,想问问关于贷款买房的事情。那些售楼小姐看到我们,感觉我们根本买不起这里的房子,理都不想理我们。最后还是有个人出来接待我们。她说这里的房子都是150平方左右的了,小户型的都卖光了。我的意思是让她帮我们算算,看看以我们的月收入,买这儿的房子是不是有可能。我大概想知道的是4000元/平方的房子,每月可以还贷2000元,这房子到底该怎么买,贷款又该向什么银行贷等简单问题,结果那个小姐拿出个贷款利率表给我们看,然后说你们要贷20年。然后又按计算器给我们算,说每月要还1080。我前面都说了每月可以还贷2000,还给我算贷20年的,脑子秀豆了,强烈BS她。顺便在BS她一点就是:作为售楼小姐,计算器都不大会按。看来下次我要想问问买房的事情,只有到小楼盘,差地段的售楼处看看了。

  • Share/Bookmark

河南大雪

大雪纷纷而至,我老婆的老家–河南省宜阳县下了暴雪。
郑州因为大雪,而导致火车、飞机停运,旅客滞留
还好这次老婆是先去我家,再回家。如果今天她就直接回家,肯定要堵在郑州的。

听说了这些事情,我们已经做了充足的准备,买了20块钱的面包,带了几根火腿肠,买了几瓶饮料,喝4瓶矿泉水,泡面就免了,万一堵在什么地方了,火车上的水肯定不够用的。

现在最希望的就是我们今天晚上的火车不要遭遇大雪,让我们顺利到家。

还希望老婆能拿到25号徐州到洛阳的火车票,并顺利到家。

菩萨保佑啊

  • Share/Bookmark

关于建立个人身份认证的一点想法

今天看到有人在提网上身份认证问题,这个问题我早些时候也想过,但还没有一个系统的方案。

我是这么想的:
每个上网的人在认证中心上登记实名和其他的联系方式,比如Email、QQ号码等。所有的用户信息都分类存放。比如:
个人基本信息:姓名、性别、出生年月、身份证号码
网上联系信息1:NickName、Email、QQ、MSN(有这么多的网上联系信息栏,就是为了保证不同类型的网站能看到不同的联系信息,比如说163.com网站能看到联系信息1,而3721就只能看到联系信息3)
网上联系信息2:NickName、Email、QQ、MSN
网上联系信息3:NickName、Email、QQ、MSN

然后系统分配给他一个唯一的用户ID。

之后,用户就可以使用这个ID来到其他网站注册了。注册的时候,可以选择这个网站可以看到自己的哪些信息,这些信息不会被这个网站放到本地保存,只是在认证服务器上加一条权限,说明XX网站能查看ID为YYY的用户的哪些信息

这样就在最大程度上方便了用户注册,而且还兼顾实名制。

我不知道韩国在这方面是怎么做的,以上只是我的一点想法。

PS:认证中心只能交给第三方组织或政府来办,任何具有商业性质的公司都是无权架设认证中心的。

  • Share/Bookmark

过年了,回家了!

今天晚上就要回家了,心里无比高兴啊。火车票很难买,我们找了一个可以提前一个月订票的公司来订票,终于在10号拿到了火车票。是A开头的车,我Google了一下,发现A开头的车是最慢的车,连L开头的都不如。按照时刻表,21号早上8点多到徐州,谁知道这个车会晚点几个小时呢。去年过年回上海的时候,我坐的是一辆L开头的车,本来特快车只要5小时45分钟就能到了,这辆车竟然在路上跑了19个小时。其间不停的给其他火车让道,受不了了。

最近Blog也没怎么更新,天太冷了,不想在电脑前坐着,只想钻进暖暖的被窝。呵呵

Blog的主题让我换掉了,现在的主题更能体现我Blog未来的内容趋势。

昨天晚上,给手机充电,发现好像充不进去了,不知是手机充电器接口坏了还是充电器坏了,充电的符号一直在动,但电量就是不增。回家找个修手机的地方看看,不行就买个座充。再买块电池。我的Simens 2128是03年3月份买的,用了快到3年了,我依然很喜欢。

昨天在Enggate上看到了Nokia770手机,不高的售价($350),强大的性能,让我心动。原本打算手机再用2年的,看到这么好的一款新机,我也心动了。等到它在中国上市后,就买一台。它既是一部电话,又是个掌上电脑,而且屏幕超大(4.3英寸),比多普达大多了。

过年回家的日程安排我都写好了,想知道我这几天行程的朋友可以通过CalendarHub了解

  • Share/Bookmark

最近的情况

2005年还有几天就过去了。在05年里,web在经历一场变革,那就是Web2.0概念的提出。
对于这个新概念,不同的人有不同的反应。新浪、搜狐等大公司就是简单的对自己的服务进行包装,就叫出了Web2.0,而忽略了Web2.0的本质。
今年还是流氓软件年,形形色色的流氓软件齐作怪,我就在年初的时候中过一次招。致使在年底的时候,网上总结出了流氓软件列表。
今年还是“封”年,最令人感到无奈的就是Wikipedia被封。后来Intel被封足以证明GFW的强大。GFW的出现削弱了中国网民的上网体验,但同时也给中国的Web发展起到了保护作用。

我的极性不好,对于2005年发生的大事,脑子里记得不是很多。

最近2个月的新工作,使我体会到公司越大,开发越正规,能接触到新技术的机会就越少。相信很多同行都有此感受。标准建站、AJAX这些时下流行的技术,在大公司里根本就无处发挥。

在新公司里,员工手册上写明不能使用盗版软件。所以我就下载试用了很多免费软件、开源软件,现在用起来感觉挺爽的,很多软件不比商业软件差。

  • Share/Bookmark

感觉Web2.0太孤单了,没有统一平台

看到一篇文章《2005年最佳Web2.0软件大盘点》

感觉目前的Web2.0太孤单了,一个网站就提供一种服务。有没有能整合目前Web2.0服务的平台网站呢?
各个Web2.0服务就像是插件一样,大家遵循一个特定的标准,与平台进行交互。

这样我就可以在平台上使用CalendarHub的日历,使用voo2do的ToList,使用Gmail,而无须登陆他们的网站。而我现在的做法是登陆CalendarHub查看我的日历,登陆voo2do查看我的todo。而我宁愿直接在Plaxo中完成Calendar、TODO、Note、联系人的使用。尽管Plaxo中不提供RSS输出,我认为这对于他们来说还是小菜的。

现在的Netvibes仅能提供读取RSS,与我前面说的还是有本质上的区别。

  • Share/Bookmark
Page 30 of 43« First...1020«2829303132»40...Last »