仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 660|回复: 8
打印 上一主题 下一主题

[学习教程] ASP.NET教程之ASP.NET Session丧失缘故原由和应对战略

[复制链接]
精灵巫婆 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:18:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
也许C#刚上市的时候有些抄袭Java吧,但自从C#2.0上市之后,整个局面就扭转乾坤了,不但Java在模仿C#,而且他从来都没能跟得上C#的脚步。</p>一般操纵情形下会有ASP.NETSession丧失的情形呈现。由于程序是在一直的被操纵,扫除Session超时的大概。别的,Session超不时间被设定成60分钟,不会这么快就超时的。
如今我就把缘故原由息争决举措写出来。
ASP.NETSession丧失缘故原由:
因为Asp.net程序是默许设置,以是Web.Config文件中关于Session的设定以下:
<sessionStatemode=InProcstateConnectionString=tcpip=127.0.0.1:42424sqlConnectionString=datasource=127.0.0.1;Trusted_Connection=yescookieless=truetimeout=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:SessionvariablesarelostintermittentlyinASP.NETapplications
ASP.NETSession丧失办理举措:
后面说到的sessionState标签中mode属性能够有三个取值,除InProc以外,还能够为StateServer、SQLServer。这两种存Session的办法都是历程外的,以是当aspnet_wp.exe重起的时分,不会影响到Session。
如今请将mode设定为StateServer。StateServer是本机的一个服务,能够在体系服务里看到服务名为ASP.NETStateService的服务,默许情形是不启动的。当我们设定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]
publicclassMyClass
{
......
}
详细的序列化相干的常识请参这里。
至此,ASP.NETSession丧失成绩办理。
关于asp.netSession丧失成绩的总结
asp中Session的事情道理:
asp的Session是具有历程依附性的。ASPSession形态存于IIS的历程中,也就是inetinfo.exe这个程序。以是当inetinfo.exe历程溃散时,这些信息也就丧失。别的,重起大概封闭IIS服务城市形成信息的丧失。
asp.netSession的完成
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:
利用webgarden形式,且利用了InProcmode作为保留session的体例
ASP.NETSession丧失成绩办理履历
1.判别是否是缘故原由1酿成的,能够在每次革新页面的时分,跟踪bin中某个文件的修正工夫
2.做Session读写日记,每次读写Session都要纪录上去,而且要纪录SessionID、Session值、地点页面、以后函数、函数中的第几回Session操纵,如许找丧失的缘故原由会便利良多
3.假如同意的话,倡议利用stateserver或sqlserver保留session,如许不简单丧失
4.在global.asa中到场代码纪录Session的创立工夫和停止工夫,超时酿成的Session丧失是能够在SessionEnd中纪录上去的。
5.假如有些代码中利用客户端剧本,如javascript保护Session形态,就要实验调试剧本,是否是由于剧本毛病引发Session丧失。(杰之蓝
我见过java运行在手机上,包括很廉价的山寨手机,但是却暂时没发现.net在手机上有什么作为。wp7可能是个转机,但是按照《Java的跨平台就是一句谎言。那.net的跨平台也当之无愧是一句谎言。
若相依 该用户已被删除
沙发
发表于 2015-1-19 08:03:47 | 只看该作者
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
admin 该用户已被删除
板凳
发表于 2015-1-27 06:00:14 | 只看该作者
主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台脚本语言,它的语法和VisualBASIC类似,可以像SSI(ServerSideInclude)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但是它自身存在着许多缺陷,最重要的就是安全性问题。
爱飞 该用户已被删除
地板
发表于 2015-2-5 03:35:29 | 只看该作者
大哥拜托,Java在95年就出来了,微软垄断个妹啊,服务器市场微软完全是后后来者,当年都是Unix的市场,现在被WindowsServer和Linux抢下大片,包括数据库也一样。
变相怪杰 该用户已被删除
5#
发表于 2015-2-11 03:49:21 | 只看该作者
它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。
莫相离 该用户已被删除
6#
发表于 2015-3-1 21:04:19 | 只看该作者
主流网站开发语言之JSP:JSP和Servlet要放在一起讲,是因为它们都是Sun公司的J2EE(Java2platformEnterpriseEdition)应用体系中的一部分。
小妖女 该用户已被删除
7#
发表于 2015-3-11 00:14:21 | 只看该作者
可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。
若天明 该用户已被删除
8#
发表于 2015-3-17 16:51:26 | 只看该作者
比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变。
谁可相欹 该用户已被删除
9#
发表于 2015-3-24 13:17:36 | 只看该作者
碰到复杂点的问题都不知道能不能解决,现在有点实力的公司都选择自已在开源的基础上做开发。但没听说过有人在IIS上做改进的,windows、sqlserver集群方面的应用也很少见。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-13 15:18

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表