仓酷云

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

[学习教程] NET网页编程之Session丧失的办理举措

[复制链接]
若天明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:23:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
捆绑编译器。用户不需要受制于厂家,自己就能将程序在新平台上编译运行。除了牛B轰轰的linux,估计也没有系统捆绑c/c++的编译器,而且许多新平台都无法支持复杂的c/c++编译器在上面直接运行。比来在做ASP.NET项目时,测试网站总是取不出Session中的值,在网上搜刮了一下,找到一些办理办法,纪录在这里。最初利用存储在StateServer中的举措办理了成绩。

SessionStateTimeout,其次要缘故原由有三种

一:有些杀病毒软件会往扫描您的Web.Config文件,当时Session一定失落,这是微软的说法。
二:程序外部里有让Session失落掉的代码,及服务器内存不敷发生的。
三:程序有框架页面和跨域情形。

第一种办理举措是:使杀病毒软件屏障扫描Web.Config文件(程序运转时本人也不要往编纂它)
第二种是反省代码有没有Session.Abandon()之类的。
第三种是在Window服务中将ASP.NETStateService启动。

明天碰到asp.netSession丧失了,然后又返来了,Session里存储的是用户信息,最初招致每次革新是分歧的用户或是未登录形态。很让人吐血的成绩。
弄了2天没弄出来,最初重写了考证机制,都放在了Cookie里了,Session不敢用了。
明天发明,成绩是因为设置iis6的使用程序池内的功能内的最年夜web历程数招致的,因为Session默许是寄存在web历程里的,历程开多了,招致Session不克不及共享,每次革新又由分歧的历程来处置,以是就招致革新出来分歧的用户,条件是在本机登录过这些用户。
办理办法能够用stateserver大概用sqlserver形式来存储Session。
因为google没搜到相似成绩,以是这里拿出来讲一下这个让我头痛了2天,最初修正了n多页面的成绩。

asp.netSession丧失网上搜集
Asp.net默许设置下,Session莫名丧失的缘故原由及办理举措
一般操纵情形下Session会无端丧失。由于程序是在一直的被操纵,扫除Session超时的大概。别的,Session超不时间被设定成60分钟,不会这么快就超时的。

此次到CSDN上搜了一下帖子,发明很多多少人在会商这个成绩,然后我又google了一下,发明微软网站上也有相似的内容。

如今我就把缘故原由息争决举措写出来。

缘故原由:
因为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

办理举措:
后面说到的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中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的体例

办理丧失的履历
1.判别是否是缘故原由1酿成的,能够在每次革新页面的时分,跟踪bin中某个文件的修正工夫
2.做Session读写日记,每次读写Session都要纪录上去,而且要纪录SessionID、Session值、地点页面、以后函数、函数中的第几回Session操纵,如许找丧失的缘故原由会便利良多
3.假如同意的话,倡议利用stateserver或sqlserver保留Session,如许不简单丧失
4.在global.asax中到场代码纪录Session的创立工夫和停止工夫,超时酿成的Session丧失是能够在SessionEnd中纪录上去的。
5.假如有些代码中利用客户端剧本,如JavaScript保护Session形态,就要实验调试剧本,是否是由于剧本毛病引发Session丧失。你觉得学习.NET怎么样,我懂的少,问的可能很幼稚,见笑了啊:)
小魔女 该用户已被删除
沙发
发表于 2015-1-18 13:51:53 | 只看该作者
由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。
乐观 该用户已被删除
板凳
发表于 2015-1-25 20:29:02 | 只看该作者
ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。
山那边是海 该用户已被删除
地板
发表于 2015-2-4 00:07:05 | 只看该作者
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。
飘飘悠悠 该用户已被删除
5#
发表于 2015-2-9 07:56:41 | 只看该作者
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
金色的骷髅 该用户已被删除
6#
发表于 2015-2-27 04:59:20 | 只看该作者
通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。
冷月葬花魂 该用户已被删除
7#
发表于 2015-3-8 22:17:56 | 只看该作者
是指转换后的Servlet程序代码的行数。这给调试代码带来一定困难。所以,在排除错误时,可以采取分段排除的方法(在可能出错的代码前后输出一些字符串,用字符串是否被输出来确定代码段从哪里开始出错)。
海妖 该用户已被删除
8#
发表于 2015-3-23 01:48:30 | 只看该作者
同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-6-16 04:33

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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