仓酷云

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

[学习教程] NET网页编程之ASP.NET中Session的七点熟悉

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

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

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

x
它有很多缺点的,有兴趣可以到网上去搜索一下。于是微软有发明了“下一代”C++:C++/CLI语言,这个可以解决在.NETFramework中,托管C++产生的问题。在《程序员》杂志上,lippman和李建中合作连载介绍了C++/CLI语言。在ASP.NETSession的利用傍边我们会碰到良多的成绩,那末这里我们来谈下常常呈现的一些经常使用ASP.NETSession的了解:

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

了局i=2,j=1

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

了局ds.Tables[0].Rows[0][0]=="9999"ds2.Tables[0].Rows[0][0]=="9999";

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

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

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

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

ASP.NETSession的七点熟悉之七:
关于Sesson的扫除。

问:
1,假如我在Session中保留一个对照年夜的DataSet,如许aspnet_wp.exe占据的内存会很年夜,假设我加入了利用这个DataSet的页面,我想开释该Session,我用Session.Clear()大概DataSet.Clear()都不克不及使内存的占用降上去,即便Session过了刻日,内存也没有降上去,对照狐疑,谁能给我具体注释一下。
2,我的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的了解是否是有所匡助呢?在VC.net的版本上,为了让C++运行在.NETFramework中,微软为C++引进了托管,就是托管C++(ManagedC++),这个根本就没有流行起来,自托管C++产生以后就没有收到过好评。
深爱那片海 该用户已被删除
沙发
发表于 2015-1-18 13:48:21 | 只看该作者
ASP.NET可以无缝地与WYSIWYGHTML编辑器和其他编程工具(包括MicrosoftVisualStudio.NET)一起工作。这不仅使得Web开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到Web页的GUI和完全集成的调试支持。微软为ASP.net设计了这样一些策略:易于写出结构清晰的代码、代码易于重用和共享、可用编译类语言编写等等,目的是让程序员更容易开发出Web应用,满足计算向Web转移的战略需要。
只想知道 该用户已被删除
板凳
发表于 2015-1-24 11:28:46 | 只看该作者
有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。
分手快乐 该用户已被删除
地板
发表于 2015-2-1 09:50:00 | 只看该作者
可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。
简单生活 该用户已被删除
5#
发表于 2015-2-7 03:10:17 | 只看该作者
通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。
小魔女 该用户已被删除
6#
发表于 2015-2-20 10:25:20 | 只看该作者
Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。
透明 该用户已被删除
7#
发表于 2015-3-6 17:19:56 | 只看该作者
如今主流的Web服务器软件主要由IIS或Apache组成。IIS支持ASP且只能运行在Windows平台下,Apache支持PHP,CGI,JSP且可运行于多种平台,虽然Apache是世界使用排名第一的Web服务器平台。
若相依 该用户已被删除
8#
发表于 2015-3-13 05:10:01 | 只看该作者
同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。
再见西城 该用户已被删除
9#
发表于 2015-3-20 13:59:42 | 只看该作者
现在的ASP.net分为两个版本:1.1和2.0Asp.net1.1用VS2003(visualstudio2003)编程。Asp.net2.0用VS2005(visualstudio2005)编程。现在一般开发用的是VS2003。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-19 12:35

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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