爱飞 发表于 2015-1-16 22:49:18

ASP.NET网站制作之应当学会:ASP.NET的 Session 详解

c++是语言,其实C++和java的应用范围根本就不一样的。在java应用的领域内,c++是不合适的。所以微软才搞了C#和Java对抗。asp.net|session|详解Session模子简介
Session是甚么呢?复杂来讲就是服务器给客户真个一个编号。当一台WWW服务器运转时,大概有多少个用户扫瞄正在运正在这台服务器上的网站。当每一个用户初次与这台WWW服务器创建毗连时,他就与这个服务器创建了一个Session,同时服务器会主动为其分派一个SessionID,用以标识这个用户的独一身份。这个SessionID是由WWW服务器随机发生的一个由24个字符构成的字符串,我们会鄙人面的实行中见到它的实践模样。
这个独一的SessionID是有很年夜的实践意义的。当一个用户提交了表单时,扫瞄器会将用户的SessionID主动附加在HTTP头信息中,(这是扫瞄器的主动功效,用户不会发觉到),当服务器处置完这个表单后,将了局前往给SessionID所对应的用户。试想,假如没有SessionID,当有两个用户同时举行注册时,服务器如何才干晓得究竟是哪一个用户提交了哪一个表单呢。固然,SessionID另有良多其他的感化,我们会在前面说起到。
除了SessionID,在每一个Session中还包括良多其他信息。可是关于编写ASP或ASP.NET的程序与来讲,最有效的仍是能够经由过程会见ASP/ASP.NET的内置Session工具,为每一个用户存储各自的信息。比方我们想懂得一下会见我们网站的用户扫瞄了几个页面,我们大概在用户大概会见到每一个的页面中到场:
<%
IfSession("PageViewed")=""Then
 Session("PageViewed")=1
Else
 Session("PageViewed")=Session("PageViewed")+1
EndIf
%>
经由过程以下这句话可让用户得知本人扫瞄了几个页面:
<%
Response.Write("Youhaveviewed"&Session("PageViewed")&"pages")
%>
可能有些有些读者会问:这个看似像是数组的Session(“..”)是那里来的?必要我界说吗?实践上,这个Session工具是具有ASP注释才能的的WWW服务器的内建工具。也就是说ASP的体系中已给你界说好了这个工具,你只必要利用就好了。个中Session(“..”)中的..就仿佛变量名称,Session(“..”)=$$中的$$就是变量的值了。你只必要写上句话,在这个用户的每一个页面中都能够会见..变量中的值了。
实在ASP一共内建了7个工具,有Session、Application、Cookie、Response、Request、Server等。在其他的服务器端剧本言语如JSP、PHP等中也有其相似的工具,只是叫法大概利用办法上不太一样。
ASPSession的功效的缺点
今朝ASP的开辟职员都正在利用Session这一壮大的功效,可是在他们利用的过程当中却发明了ASPSession有以下缺点:
历程依附性:ASPSession形态存于IIS的历程中,也就是inetinfo.exe这个程序。以是当inetinfo.exe历程溃散时,这些信息也就丧失。别的,重起大概封闭IIS服务城市形成信息的丧失。
Session形态利用局限的范围性:刚一个用户从一个网站会见到别的一个网站时,这些Session信息其实不会随之迁徙已往。比方:新浪网站的WWW服务器大概不止一个,一个用户登录以后要往各个频道扫瞄,可是每一个频道都在分歧的服务器上,假如想在这些WWW服务器共享Session信息怎样办呢?
Cookie的依附性:实践上客户真个Session信息是存储与Cookie中的,假如客户端完整禁用失落了Cookie功效,他也就不克不及享用到了Session供应的功效了。
鉴于ASPSession的以上缺点,微软的计划者们在计划开辟ASP.NETSession时举行了响应的改善,完整克制了以上缺点,使得ASP.NETSession成了一个加倍壮大的功效。
Web.config文件简介
有的ASP.NET程序员说:Web.config文件?我历来没有传闻过啊,但是我写的程序不是也能很一般的运转吗?是的,你说得没错,没有Web.config文件程序是能够一般运转的。可是,假如你做了一个年夜型的网站,必要对全部网站做一些全体设置,比方全部网站的页面利用何种言语编写的、网站的平安认证形式、Session信息存储体例等,这时候你就必要利用Web.config文件了。固然Web.config文件中的某些选项是能够经由过程IIS设置的,可是假如在Web.config中也有响应的设置就会掩盖失落IIS中的设置。并且,Web.config文件的最年夜的便当的地方就是能够在ASP.NET页面中经由过程挪用System.web名字空间会见Web.config中的设置。
Web.config有两种,分离是服务器设置文件和Web使用程序设置文件,他们都名为Web.config。在这个设置文件中会保留以后IIS服务器中网页的利用哪一种言语编写的、使用程序平安认证形式、Session信息存储体例的一系列信息。这些信息是利用XML语法保留的,假如想对其编纂,利用文本编纂器就好了。
个中服务器设置文件会对IIS服务器下一切的站点中的一切使用程序起感化。在.NETFramework1.0中,服务器的Web.config文件是存在:WinNTMicrosoft.NETFrameworkv1.0.3705中的。
而Web使用程序设置文件Web.config则保留在各个Web使用程序中。比方:以后网站的根目次Inetpubwwwroot,而以后的Web使用程序为MyApplication,则Web使用程序根目次就应为:InetpubwwwrootMyApplication。假如你的网站有且只要一个Web使用程序,一样平常说来使用程序的根目次就是Inetpubwwwroot。假如想增加一个Web使用程序,在IIS中增加一个具有使用程序肇端点的假造目次就好了。这个目次下的文件及目次将被视为一个Web使用程序。可是,如许经由过程IIS增加Web使用程序是不会为你天生Web.config文件的。假如想创立一个带有Web.config文件的Web使用程序,必要利用VisualStudio.NET,新建一个Web使用程序项目。
Web使用程序的设置文件Web.config是可选的,无关紧要。假如没有,每一个Web使用程序会利用服务器的Web.config设置文件。假如有,则会掩盖服务器Web.config设置文件中响应的值。
在ASP.NET中,Web.config修正保留后会主动立即效果,不必再像ASP中的设置文件修正后必要从头启动Web使用程序才干失效了。
Web.config文件中的Session设置信息
翻开某个使用程序的设置文件Web.config后,我们会发明以下这段:
<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="datasource=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="20"
/>
这一段就是设置使用程序是怎样存储Session信息的了。我们以下的各类操纵次要是针对这一段设置睁开。让我们先看看这一段设置中所包括的内容的意义。sessionState节点的语法是如许的:
<sessionStatemode="Off|InProc|StateServer|SQLServer"
cookieless="true|false"
timeout="numberofminutes"
stateConnectionString="tcpip=server:port"
sqlConnectionString="sqlconnectionstring"
stateNetworkTimeout="numberofseconds"
/>
必需有的属性是
属性选项形貌
mode设置将Session信息存储到那里
Off设置为不利用Session功效
InProc设置为将Session存储在历程内,就是ASP中的存储体例,这是默许值。
StateServer设置为将Session存储在自力的形态服务中。
SQLServer设置将Session存储在SQLServer中。
可选的属性是:
属性选项形貌
cookieless设置客户真个Session信息存储到那里
ture利用Cookieless形式
false利用Cookie形式,这是默许值。
timeout设置经由几分钟后服务器主动保持Session信息。默许为20分钟
stateConnectionString设置将Session信息存储在形态服务中时利用的服务器称号和端标语,比方:"tcpip=127.0.0.1:42424”。当mode的值是StateServer是,这个属性是必须的。
sqlConnectionString设置与SQLServer毗连时的毗连字符串。比方"datasource=localhost;IntegratedSecurity=SSPI;InitialCatalog=northwind"。当mode的值是SQLServer时,这个属性是必须的。
stateNetworkTimeout设置当利用StateServer形式存储Session形态时,经由几秒余暇后,断开Web服务器与存储形态信息的服务器的TCP/IP毗连的。默许值是10秒钟。
ASP.NET中客户端Session形态的存储
在我们下面的Session模子简介中,人人能够发明Session形态应当存储在两个中央,分离是客户端和服务器端。客户端只卖力保留响应网站的SessionID,而其他的Session信息则保留在服务器端。在ASP中,客户真个SessionID实践是以Cookie的情势存储的。假如用户在扫瞄器的设置当选择了禁用Cookie,那么他也就没法享用Session的便当的地方了,乃至形成不克不及会见某些网站。为懂得决以上成绩,在ASP.NET中客户真个Session信息存储体例分为:Cookie和Cookieless两种。
ASP.NET中,默许形态下,在客户端仍是利用Cookie存储Session信息的。假如我们想在客户端利用Cookieless的体例存储Session信息的办法以下:
找到以后Web使用程序的根目次,翻开Web.Config文件,找到以下段落:
<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="datasource=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="20"
/>
这段话中的cookieless="false"改成:cookieless="true",如许,客户真个Session信息就不再利用Cookie存储了,而是将其经由过程URL存储。封闭以后的IE,翻开一个新IE,从头会见方才的Web使用程序,就会看到相似上面的模样:
个中,http://localhost/MyTestApplication/(ulqsek45heu3ic2a5zgdl245)/default.aspx中黑体标出的就是客户真个SessionID。注重,这段信息是由IIS主动加上的,不会影响之前一般的毗连。
ASP.NET中服务器端Session形态的存储
筹办事情
为了您能更好的体验到实行征象,您能够创建一个叫做SessionState.aspx的页面,然后把以下这些代码增加到<body></body>中。
<scriptrunat="server">
SubSession_Add(senderAsObject,eAsEventArgs)
 Session("MySession")=text1.Value
 span1.InnerHtml="Sessiondataupdated!<P>Yoursessioncontains:<fontcolor=red>"&
Session("MySession").ToString()&"</font>"
EndSub
SubCheckSession(senderAsObject,eAsEventArgs)
 If(Session("MySession")IsNothing)Then
 span1.InnerHtml="NOTHING,SESSIONDATALOST!"
 Else
 span1.InnerHtml="Yoursessioncontains:<fontcolor=red>"&
Session("MySession").ToString()&"</font>"
EndIf
EndSub
</script>
<formrunat="server"id="Form2">
 <inputid="text1"type="text"runat="server"name="text1">
 <inputtype="submit"runat="server"OnServerClick="Session_Add"
 value="AddtoSessionState"id="Submit1"name="Submit1">
 <inputtype="submit"runat="server"OnServerClick="CheckSession"
 value="ViewSessionState"id="Submit2"name="Submit2">
</form>
<hrsize="1">
<fontsize="6"><spanid="span1"runat="server"/></font>
这个SessionState.aspx的页面能够用来测试在以后的服务器上是不是丧失了Session信息。
将服务器Session信息存储在历程中
让我们往返到Web.config文件的方才那段段落中:
<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="datasource=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="20"
/>
当mode的值是InProc时,申明服务器正在利用这类形式。
这种体例和之前ASP中的形式一样,就是服务器将Session信息存储在IIS历程中。当IIS封闭、重起后,这些信息城市丧失。可是这类形式也有本人最年夜优点,就是功能最高。应为一切的Session信息都存储在了IIS的历程中,以是IIS可以很快的会见到这些信息,这类形式的功能比历程外存储Session信息或是在SQLServer中存储Session信息都要快上良多。这类形式也是ASP.NET的默许体例。
好了,如今让我们做个实验。翻开方才的SessionState.aspx页面,任意输出一些字符,使其存储在Session中。然后,让我们让IIS重起。注重,并非使以后的站点中断再入手下手,而是在IIS中本机的呆板名的节点上点击鼠标右键,选择从头启动IIS。(想现在利用NT4时,从头启动IIS必需要从头启动盘算机才行,微软真是@#$%^&)前往到SessionState.aspx页面中,反省方才的Session信息,发明信息已经丧失了。
将服务器Session信息存储在历程外
起首,让我们来翻开办理工具->服务,找到名为:ASP.NETStateService的服务,启动它。实践上,这个服务就是启动一个要保留Session信息的历程。启动这个服务后,你能够从Windows义务办理器->历程中看到一个名为aspnet_state.exe的历程,这个就是我们保留Session信息的历程。
然后,回到Web.config文件中上述的段落中,将mode的值改成StateServer。保留文件后的从头翻开一个IE,翻开SessionState.aspx页面,保留一些信息到Session中。这时候,让我们重起IIS,再回到SessionState.aspx页面中查看方才的Session信息,发明没有丧失。
实践上,这类将Session信息存储在历程外的体例不但指能够将信息存储在本机的历程外,还能够将Session信息存储在其他的服务器的历程中。这时候,不但必要将mode的值改成StateServer,还必要在stateConnectionString中设置响应的参数。比方你的盘算你是192.168.0.1,你想把Session存储在IP为192.168.0.2的盘算机的历程中,就必要设置成如许:stateConnectionString="tcpip=192.168.0.2:42424"。固然,不要健忘在192.168.0.2的盘算机中装上.NETFramework,而且启动ASP.NETStateServices服务。
将服务器Session信息存储在SQLServer中
起首,仍是让我们来做一些筹办事情。启动SQLServer和SQLServer代办署理服务。在SQLServer中实行一个叫做InstallSqlState.sql的剧本文件。这个剧本文件将在SQLServer中创立一个用来专门存储Session信息的数据库,及一个保护Session信息数据库的SQLServer代办署理功课。我们能够在以下路径中找到谁人文件:
winntMicrosoft.NETFramework
然后翻开查询剖析器,毗连到SQLServer服务器,翻开方才的谁人文件而且实行。稍等半晌,数据库及功课就创建好了。这时候,你能够翻开企业办理器,看到新增了一个叫ASPState的数据库。可是这个数据库中只是些存储历程,没有效户表。实践上Session信息是存储在了tempdb数据库的ASPStateTempSessions表中的,别的一个ASPStateTempApplications表存储了ASP中Application对象信息。这两个表也是方才的谁人剧本创建的。别的检察办理->SQLServer代办署理->功课,发明也多了一个叫做ASPState_Job_DeleteExpiredSessions的功课,这个功课实践上就是每分钟往ASPStateTempSessions表中删除过时的Session信息的。
接着,我们前往到Web.config文件,修正mode的值改成SQLServer。注重,还要同时修正sqlConnectionString的值,格局为:
sqlConnectionString="datasource=localhost;IntegratedSecurity=SSPI;"
个中datasource是指SQLServer服务器的IP地点,假如SQLServer与IIS是一台机子,写127.0.0.1就好了。IntegratedSecurity=SSPI的意义是利用Windows集成身份考证,如许,会见数据库将以ASP.NET的身份举行,经由过程云云设置,可以取得比利用userid=sa;password=口令的SQLServer考证体例更好的平安性。固然,假如SQLServer运转于另外一台盘算机上,你大概会必要经由过程ActiveDirectory域的体例来保护双方考证的分歧性。
同样,让我们做个实验。向SessionState.aspx中增加Session信息,这时候发明Session信息已存在SQLServer中了,即便你重起盘算机,方才的Session信息也不会丧失。如今,你已完整瞥见了Session信息究竟是甚么模样的了,并且又是存储在SQLServer中的,无能甚么就看你的发扬了。
总结
经由过程这篇文章,你能够看到在Session的办理和保护上,ASP.NET比ASP有了很年夜的前进,我们能够加倍随便的选择合适的办法了。关于企业级的使用来讲,这无疑关于服务器的同步、服务器的不乱性、牢靠性都是有益的。信任在壮大的微软撑持下,新一代的电子商务平台将会搭建的更好!
数据库有很多应用领域,但是如果你单单学数据库的话基本上做数据库管理员比较合适而已,跟领域结合的你还得再学习那些领域知识。(其实数据挖掘我真是不懂,本来这学期开了一门课了。

深爱那片海 发表于 2015-1-20 05:08:10

主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台脚本语言,它的语法和VisualBASIC类似,可以像SSI(ServerSideInclude)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但是它自身存在着许多缺陷,最重要的就是安全性问题。

爱飞 发表于 2015-2-2 22:31:25

虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。

谁可相欹 发表于 2015-2-8 16:05:13

目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案.

山那边是海 发表于 2015-2-25 20:08:46

在一个项目中谁敢保证每天几千万甚至几亿条的数据不丢失?谁敢保证应用的高可靠性?有可以借签的项目吗?

老尸 发表于 2015-3-8 02:29:16

最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。

精灵巫婆 发表于 2015-3-15 19:49:34

业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。

飘飘悠悠 发表于 2015-3-22 03:10:26

当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。
页: [1]
查看完整版本: ASP.NET网站制作之应当学会:ASP.NET的 Session 详解