新足迹

 找回密码
 注册

精华好帖回顾

· 别了10~11赛季 (2011-5-29) tld128 · 无本地经验,如何找到第一份工+你也可以活得很精彩+转行讨论+设计你的职业人生 (2013-6-22) 紫衣
· 同舟共济三人行——丰盛温馨的圣诞晚餐 (2006-12-25) poloand · 有关孩子学中文的感想 (2009-3-6) floodp
Advertisement
Advertisement
查看: 1512|回复: 26

[IT] 求助 .NET C# 问题: 为什么我的 SESSION 老是 Timeout? [复制链接]

发表于 2010-1-21 12:19 |显示全部楼层
此文章由 小盆友 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 小盆友 所有!转贴必须注明作者、出处和本声明,并保持内容完整
请问我在让 user log in  的时候 create  一个 session:

login.aspx 里是这样的:
Session["admin_uid"] = intID;
Session["admin_name"] = strName;
Session.Timeout = 3600;

在 Web.Config 里是这样的:
<sessionState
            mode="InProc"
            stateConnectionString="tcpip=127.0.0.1:42424"
            sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
            cookieless="false"
            timeout="3600"
/>


可是这个 Session 经常莫明其妙的 timeout.  特别是当我修改了某个页面,然后上传到 web server, 替换掉原来的那个旧文件的时候, 经常会 timeout...要 user 重新 log in.

请问有谁知道问题出在哪里吗?

谢谢!
Advertisement
Advertisement

发表于 2010-1-21 13:04 |显示全部楼层
此文章由 小盆友 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 小盆友 所有!转贴必须注明作者、出处和本声明,并保持内容完整
顶起来给高手看看.

发表于 2010-1-21 14:17 |显示全部楼层
此文章由 小盆友 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 小盆友 所有!转贴必须注明作者、出处和本声明,并保持内容完整

发表于 2010-1-21 14:56 |显示全部楼层
此文章由 irenejicn 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 irenejicn 所有!转贴必须注明作者、出处和本声明,并保持内容完整
如果上传文件中,包括ddl,那么server可能会重启,session就丢掉了

发表于 2010-1-21 15:01 |显示全部楼层
此文章由 litarcy 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 litarcy 所有!转贴必须注明作者、出处和本声明,并保持内容完整
this is natual, when you modify some pages

发表于 2010-1-21 15:03 |显示全部楼层
此文章由 o2h2o 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 o2h2o 所有!转贴必须注明作者、出处和本声明,并保持内容完整
这个完全是 正常的
hot deploy 不能保证 内存变量 一定存在的
Advertisement
Advertisement

发表于 2010-1-21 15:36 |显示全部楼层
此文章由 小盆友 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 小盆友 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 irenejicn 于 2010-1-21 14:56 发表
如果上传文件中,包括ddl,那么server可能会重启,session就丢掉了


不包括 ddl...

发表于 2010-1-21 15:37 |显示全部楼层
此文章由 小盆友 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 小盆友 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 o2h2o 于 2010-1-21 15:03 发表
这个完全是 正常的
hot deploy 不能保证 内存变量 一定存在的


看不懂...

发表于 2010-1-21 15:37 |显示全部楼层
此文章由 小盆友 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 小盆友 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我上传修改的页面是一般的 aspx 文件, 有时候没事, 有时候要重新 login.

发表于 2010-1-21 15:39 |显示全部楼层
此文章由 gooderic1977 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 gooderic1977 所有!转贴必须注明作者、出处和本声明,并保持内容完整
你重新上传DLL的时候,Application pool会自动Recycle, 加上你用InProc, session var丢失很正常的。
建议:
1.上传之前先放holding page
2.改用StateServer 来存放session var

发表于 2010-1-21 15:40 |显示全部楼层
此文章由 中间人 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 中间人 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我猜app重启了。你在global里面监视那几个app级别是事件看看?
Advertisement
Advertisement

2008年度奖章获得者

发表于 2010-1-21 15:44 |显示全部楼层
此文章由 degra 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 degra 所有!转贴必须注明作者、出处和本声明,并保持内容完整
看起来是sessionState mode不应该用InProc, 用其他mode试试?

btw 我不是C# 人

发表于 2010-1-21 15:49 |显示全部楼层
此文章由 小盆友 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 小盆友 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 gooderic1977 于 2010-1-21 15:39 发表
你重新上传DLL的时候,Application pool会自动Recycle, 加上你用InProc, session var丢失很正常的。
建议:
1.上传之前先放holding page
2.改用StateServer 来存放session var


这样吗?
<sessionState
            mode="StateServer"
            stateConnectionString="tcpip=127.0.0.1:42424"
            sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
            cookieless="false"
            timeout="3600"
/>

我试试...

[ 本帖最后由 小盆友 于 2010-1-21 15:52 编辑 ]

发表于 2010-1-21 15:49 |显示全部楼层
此文章由 小盆友 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 小盆友 所有!转贴必须注明作者、出处和本声明,并保持内容完整
谢谢楼上各位的回答,你们终于出来了....

发表于 2010-1-21 15:57 |显示全部楼层
此文章由 gooderic1977 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 gooderic1977 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 小盆友 于 2010-1-21 15:49 发表


这样吗?


我试试...


是,不过StateServer service一定要先起来.而且,你的session object一定要是serializable的,否则不行

发表于 2010-1-21 16:15 |显示全部楼层
此文章由 小盆友 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 小盆友 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 gooderic1977 于 2010-1-21 15:57 发表


是,不过StateServer service一定要先起来.而且,你的session object一定要是serializable的,否则不行


谢谢!等我试试再上来汇报!
Advertisement
Advertisement

发表于 2010-1-21 16:22 |显示全部楼层
此文章由 flyspirit 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 flyspirit 所有!转贴必须注明作者、出处和本声明,并保持内容完整
你上传新文件后,Asp.net会自动重新编译你的Web app,然后重新运行Web App,所以Session就没了。

发表于 2010-1-21 16:48 |显示全部楼层
此文章由 小盆友 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 小盆友 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 flyspirit 于 2010-1-21 16:22 发表
你上传新文件后,Asp.net会自动重新编译你的Web app,然后重新运行Web App,所以Session就没了。


我没有重新编译啊,有时候就是改了一个 spelling mistake 之类的东西,一上传, session就没了....

发表于 2010-1-21 16:49 |显示全部楼层
此文章由 小盆友 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 小盆友 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 gooderic1977 于 2010-1-21 15:57 发表
是,不过StateServer service一定要先起来.而且,你的session object一定要是serializable的,否则不行


Good Eric 你知道这个 StateServer 有什么不好的地方吗? 为什么 by default 是 InProc?

2007 年度奖章获得者

发表于 2010-1-21 16:51 |显示全部楼层
此文章由 coolioo 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 coolioo 所有!转贴必须注明作者、出处和本声明,并保持内容完整
ASP.Net 会自动检测文件日期,一旦文件有改动,就自动编译,然后重新运行Web App,所以Session就没了。

改动aspx文件,就会导致重新编译。纯HTML应该没事,不过我没试过。
C.B

2007 年度奖章获得者

发表于 2010-1-21 16:54 |显示全部楼层
此文章由 coolioo 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 coolioo 所有!转贴必须注明作者、出处和本声明,并保持内容完整
StateServer慢啊,InProc把Session都存在Memory,理论上快,但不scalable,因为内存有限。大型网站一般都用State Service, backed up by a database
Advertisement
Advertisement

发表于 2010-1-21 16:59 |显示全部楼层
此文章由 小盆友 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 小盆友 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 coolioo 于 2010-1-21 16:51 发表
ASP.Net 会自动检测文件日期,一旦文件有改动,就自动编译,然后重新运行Web App,所以Session就没了。

改动aspx文件,就会导致重新编译。纯HTML应该没事,不过我没试过。


是的, 改 html文件好像就没有事 :)

发表于 2010-1-21 17:00 |显示全部楼层
此文章由 flyspirit 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 flyspirit 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 小盆友 于 2010-1-21 16:48 发表


我没有重新编译啊,有时候就是改了一个 spelling mistake 之类的东西,一上传, session就没了....


ASP.NET会自动编译。

State Server对Performance有影响,最好不要改动structure转去用State Server.

上传一个新文件相当于Release新版本,尽量选在低峰的时候发布。

发表于 2010-1-21 17:01 |显示全部楼层
此文章由 小盆友 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 小盆友 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 coolioo 于 2010-1-21 16:54 发表
StateServer慢啊,InProc把Session都存在Memory,理论上快,但不scalable,因为内存有限。大型网站一般都用State Service, backed up by a database


谢谢,又学了不少东西.

发表于 2010-1-21 17:20 |显示全部楼层
此文章由 gooderic1977 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 gooderic1977 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 coolioo 于 2010-1-21 16:54 发表
StateServer慢啊,InProc把Session都存在Memory,理论上快,但不scalable,因为内存有限。大型网站一般都用State Service, backed up by a database



StateServer也是保留在内存上,读取速度本生不是问题。之所以说会影响性能是因为session对象一定要通过serialise后才能保存,所以 serialization 和de-serialization是额外的开销。

state service是独立进程,通过aspnet_state.exe来管理,所以IIS和application pool的重启对它没有影响,所以非常稳定。还有一个好处,就是如果大项目deploy在server farm环境下,stateserver和web server可以放在不同的主机上。

另外InProc还有一个缺陷,timeout过短而且不稳定。

评分

参与人数 1积分 +2 收起 理由
coolioo + 2 你太有才了

查看全部评分

2007 年度奖章获得者

发表于 2010-1-21 17:34 |显示全部楼层
此文章由 coolioo 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 coolioo 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 gooderic1977 于 2010-1-21 17:20 发表



StateServer也是保留在内存上,读取速度本生不是问题。之所以说会影响性能是因为session对象一定要通过serialise后才能保存,所以 serialization 和de-serialization是额外的开销。

state service是独立进程 ...


你说的对,我把StateServer和SQL Server Mode搞混了
C.B
Advertisement
Advertisement

发表于 2010-1-22 09:49 |显示全部楼层
此文章由 小盆友 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 小盆友 所有!转贴必须注明作者、出处和本声明,并保持内容完整
谢谢大家耐心的解答。

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部