小女巫 发表于 2015-1-18 11:20:45

ASP.NET网页编程之ASP.NET Session的七点熟悉仓酷云

可怜的程序员,还是逃不出移植的命运!ASP.NETSession的利用傍边我们会碰到良多的成绩,那末这里我们来谈下常常呈现的一些经常使用ASP.NETSession的了解:


[*]ASP.NETSession的七点熟悉之1、
关于值范例的变量,Session中保留的是值范例的拷贝
Session["__test0"]=1;inti=(int)Session["__test0"]+1;intj=(int)Session["__test0"];了局i=2,j=1


[*]ASP.NETSession的七点熟悉之2、
关于援用类新的变量,Session中保留的是援用
CDACommoncda=newCDACommon();Session["__test"]=cda.GetDataSet("selecttop1*fromtb_customer");DataSetds=(DataSet)Session["__test"];DataSetds2=(DataSet)Session["__test"];ds.Tables.Rows="9999";了局ds.Tables.Rows=="9999"ds2.Tables.Rows=="9999";


[*]ASP.NETSession的七点熟悉之3、
Session周期
新的扫瞄器窗口启动后,入手下手一个新的Session,触发Global的Session_Start的挪用,从第一个扫瞄器窗口翻开的扫瞄器窗口不启动新的Session。Session过时后,实行页面的提交也会触发Session_Start,即是是新的一个Session。


[*]ASP.NETSession的七点熟悉之4、
挪用Session
关于WebService,每一个办法的挪用城市启动一个Session,能够用上面的办法来使多个挪用在统一个Session里
CWSSyscfgcwsCfg=newCWSSyscfg();cwsCfg.CookieContainer=newSystem.Net.CookieContainer();CWSSyscfg是一个WebService类,WebService的给代办署理类设置CookieContainer属性,只需多个代办署理的CookieContainer属性是不异的值,则对这些WebService的挪用在统一个Session。能够用单例形式来完成。


[*]ASP.NETSession的七点熟悉之5、
Session数占有效期
只需页面有提交举动,则Session的一切项城市坚持,页面在20分钟(默许设置)内没有任何提交举动时Session会生效。Session内存储的多个数据项是全体生效的。


[*]ASP.NETSession的七点熟悉之6、
Session的保留
在session中假如保留的长短序列化的类好比DataView,在用SQLServer保留Session的形式下,没法利用。检察一个类是不是是序列化的办法是,需看是不是用来标志了该类。


[*]ASP.NETSession的七点熟悉之7、
关于Sesson的扫除。
假如我在Session中保留一个对照年夜的DataSet,如许aspnet_wp.exe占据的内存会很年夜,假设我加入了利用这个DataSet的页面,我想开释该Session,我用Session.Clear()大概DataSet.Clear()都不克不及使内存的占用降上去,即便Session过了刻日,内存也没有降上去,对照狐疑,谁能给我具体注释一下。
要说到session这个工具,良多人大概都嗤之以鼻。这个东东嘛,n年前就入手下手做了,有啥好讲的啊。但是,在良多中央我们仍是会发明一些成绩,比若有的人说,我的session_start引发了,怎样session_end没有啊,我在session_end做了些善后事情,这下没法完成了,怎么办啊?
比来看了些文章,分离本人的一些履历,想和人人一同会商一下个中的说法。
实在,良多这类的成绩都是由一个工具引发的,它就是sessionID。起首,是否是我一个IEclient起来,会见一个页面,只需我不关扫瞄器,sessionID就是一样的呢?良多人会想,应当是一样的吧,我扫瞄器都没关,webserver总回会以为我是统一个client,不会把sessionID变来变往的。要考证这个,让我们如今做一个复杂的实验。用vs.net创立一个复杂的asp.netwebapp.在webform1上加个button,然后在页面的pageprefix上enabletrace.接上去扫瞄这个页面,一直的clickbutton来提交request。感激asp.net的这个trace功效,我们能够看到sessionID实际上是在一直的变更的。也就是说,这时候候在服务器端,基本就不体贴这个client的存在,每次都以为它是来自一个新的client.
那这究竟是怎样回事呢?OK,让我们在page_load内里加上一句,session["variable1"]="testvalue";然后再做一下测试。Bingo,如今sessionID就坚持分歧了。我想,良多人大概之前就没有注重到这点。这里我们能够得出一个结论:要创建一个延续的session,我们必要最少利用一下session变量,用行话来讲,就是要最少往sessiondictionary中写进一次。
不外,值得注重的是,这只是个需要前提,还不是充实前提。
在提到下一个需要前提前,我们先来弄清一件事,假如我们在程序两头有global.asax,内里有session_onstart,session_onend,下面的实行是不会乐成的。缘故原由是一旦界说了session_onstart处置函数后,session的state就老是会被保留了,即便内里是空的,如许的话,sessionID就不会改动了。由于session这工具仍是损耗资本的,以是在asp.netwebapp中假如没有需要,你就不要把session_onstart,session_end写在global.asax中。
下面的实行中,我们也能够看到,假如sessionID在变更,我们就跟踪不到session_onend,一旦不乱上去,session_onend就呈现了。
如今,我们再来谈谈另外一个前提,仍是先从实行做起,我们在方才例子的基本上(包含session_onstart,session_onend),在page_load的session那行的上面加上一句,session.abandon().再来运转一把,咦,这是你会发明一点奇异的中央,session_onend不实行了,只管session_onstart实行过了一遍。(这里我们必要写一些log语句来察看到)并且,假如我们把session.abandon()写在button.onclick事务内里,session_onend就立马实行了。奇异吧,这里有甚么区分呢?
如许,第二个需要前提就激发了,要让session_onend乐成实行,最少要有一个request已被完全地实行过。下面的第一种情形,在page_load中就中断的话,第一个request都没有实行终了,session_onend就没法引发了。
综合这两个需要前提,我们终究能够得出要让session_onend实行的充实前提了:
◆最少有一个request乐成完全地实行
◆最少存储一些data在sessionstate中。能够经由过程session变量大概加上session_onstart来完成。
最初声明一点,session_onend只在InProc形式中撑持,也就是说,只在sessiondata在asp.networkerprocess中时撑持。
ASP.NETSession的七点熟悉就谈到这里,关于ASP.NETSession的了解是否是有所匡助呢?
前几天同学问我学习方向的问题。有点想法,不知道对不对,怕误导同学,现在“开源一下”。注:括号内是我现在整理的时填加上的。

蒙在股里 发表于 2015-1-20 20:50:34

这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。

冷月葬花魂 发表于 2015-1-22 08:20:23

代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。

爱飞 发表于 2015-1-25 17:48:44

如今主流的Web服务器软件主要由IIS或Apache组成。IIS支持ASP且只能运行在Windows平台下,Apache支持PHP,CGI,JSP且可运行于多种平台,虽然Apache是世界使用排名第一的Web服务器平台。

谁可相欹 发表于 2015-1-25 19:36:18

有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。

仓酷云 发表于 2015-2-1 18:19:47

ASP.net的速度是ASP不能比拟的。ASP.net是编译语言,所以,当第一次加载的时候,它会把所有的程序进行编译(其中包括worker进程,还有对语法进行编译,形成一个程序集),当程序编译后,执行速度几乎为0。

小女巫 发表于 2015-2-7 13:18:16

CGI程序在运行的时候,首先是客户向服务器上的CGI程序发送一个请求,服务器接收到客户的请求后,就会打开一个新的Process(进程)来执行CGI程序,处理客户的请求。CGI程序最后将执行的结果(HTML页面代码)传回给客户。

兰色精灵 发表于 2015-2-21 22:38:59

PHP的源代码完全公开,在OpenSource意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新,使得PHP无论在UNIX或是Win32的平台上都可以有更多新的功能。它提供丰富的函数,使得在程式设计方面有着更好的资源。目前PHP的最新版本为4.1.1,它可以在Win32以及UNIX/Linux等几乎所有的平台上良好工作。PHP在4.0版后使用了全新的Zend引擎,其在最佳化之后的效率,比较传统CGI或者ASP等技术有了更好的表现。

再现理想 发表于 2015-2-28 05:45:36

以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。

admin 发表于 2015-3-1 20:06:07

碰到复杂点的问题都不知道能不能解决,现在有点实力的公司都选择自已在开源的基础上做开发。但没听说过有人在IIS上做改进的,windows、sqlserver集群方面的应用也很少见。

若天明 发表于 2015-3-10 22:56:37

ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。

飘灵儿 发表于 2015-3-10 23:50:36

ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。

愤怒的大鸟 发表于 2015-3-11 02:00:41

但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。

小妖女 发表于 2015-3-17 18:11:38

比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变。

海妖 发表于 2015-3-24 18:40:21

JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。
页: [1]
查看完整版本: ASP.NET网页编程之ASP.NET Session的七点熟悉仓酷云