【asp源码栏目提醒】:本文主要为网学会员提供“asp_netsession的原理及应用 - 技术总结”,希望对需要asp_netsession的原理及应用 - 技术总结网友有所帮助,学习一下!
201.02电脑编程技巧与维护1问题提出在Web开发过程中经常会遇到这样的问题有些信息要在页面之间传递并保存比如用户的登录信息用户名、口令等
ASP.NET提供了3种方式QueryString、Session和Server.TransferQueryString使用比较简单但安全性差Server.Transfer用起来比较复杂Session不仅使用简单而且安全因此被越来越多的使用。
主要讨论
ASP.NETSession的原理及几种不同的使用。
2Session模型简单来说Session就是服务器给客户端的一个编号。
当一台WWW服务器运行时可能有若干个用户浏览正在运正在这台服务器上的网站。
当每个用户首次与这台WWW服务器建立连接时就与这个服务器建立了一个Session同时服务器会自动为其分配一个SessionID用以标识这个用户的唯一身份。
这个SessionID是由WWW服务器随机产生的一个由24个字符组成的字符串。
这个唯一的SessionID是有很大的实际意义的。
当一个用户提交了表单时浏览器会将用户的SessionID自动附加在HTTP头信息中这是浏览器的自动功能用户不会察觉到当服务器处理完这个表单后将结果返回给SessionID所对应的用户。
试想如果没有SessionID当有两个用户同时进行注册时服务器怎样才能知道到底是哪个用户提交了哪个表单呢。
当然SessionID还有很多其他的作用会在后面提及到。
Session对象是具有
ASP解释能力的WWW服务器的内建对象。
也就是说
ASP的系统中已经定义好了这个对象只需要使用就行了。
其中Session“..”中的“..”就好像变量名称Session“..”中的就是变量的值了。
只需要写上句话在这个用户的每个页面中都可以访问“..”变量中的值了。
3缺陷目前
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有了一个更加强大的功能。
4
ASP.NETSession功能4.1Web.config提到
ASP.NETSession必须提到Web.config文件。
没有Web.config文件程序是可以正常运行的。
但是如果做了一个
ASP.NETSession的原理及应用张洪大庆油田有限责任公司第一采油厂信息中心大庆163000摘要Session的主要作用是可以针对某一个用户的特殊连接建立一个私人的变量并且这个变量可以在不同的页面之间进行传递。
除非用户在用服务器设定的时间内没有点击任何页面否则这个变量会一直保留下去。
这是一个很有用的功能同时也是一个很占用服务器资源的功能。
着重阐述了
ASP.NETSession原理以及相关的应用。
关键词ASPASP.NETSessionPrincpleandAppltonofAS.NETssonZHGHongInformationCenterNo.1OilProductionCompanyDaqingOilCompanyLimitedDaqing163000bstrtTheeffectofSessionissignificantanditsmostimportantroleistoestablishaprivatevariableforauser’sspecialconnectionwhichvariablecanbetransferredamongdifferentpages.Thevariablewillbekeptdownunlesstheuserdon’tclickonanypageswithinthetimesetbytheserverwhichisaveryhelpfulfunctionbutneedstotakeupserverresource.ThepaperfocusesonPrincipleandApplicationofASP.NETSessionoptimumtechnology.KyworsASPASP.NETSession作者简介张洪1975-中级计算机科学与应用。
收稿日期2010-11-11442009.2011.02DATABSENDINFORMATIONMANAGEMENT数据库与信息管理大型的网站需要对整个网站做一些整体配置。
例如整个网站的页面使用何种语言来编写、网站的安全认证模式、Session信息存储方式等这时就需要使用到Web.config文件。
虽然Web.config文件中的某些选项是可以通过IIS配置的但是如果在Web.config中也有相应的设置就会覆盖掉IIS中的配置。
而且Web.config文件的最大的便利之处就是可以在SP.NET页面中通过调用System.web访问Web.config中的设置。
Web.config有两种分别是服务器配置文件和Web应用程序配置文件名都为Web.config。
在这个配置文件中会保存当前IIS服务器中网页的使用哪种语言编写的、应用程序安全认证模式、Session信息存储方式的一系列信息。
这些信息是使用XML语法保存的如果想对其编辑使用文本编辑器就行了。
其中服务器配置文件会对IIS服务器下所有的站点中的所有应用程序起作用。
在.NETFramework1.0中服务器的Web.config文件是存在WinNTMicrosoft.NETFrameworkv.0.3705中的。
而Web应用程序配置文件Web.config则保存在各个Web应用程序中。
例如当前网站的根目录Inetpubwwwroot而当前的Web应用程序为Mypplication则Web应用程序根目录就应为InetpubwwwrootMypplication。
如果网站有且只有一个Web应用程序一般说来应用程序的根目录就是Inetpubwwwroot。
如果想添加一个Web应用程序在IIS中添加一个具有应用程序起始点的虚拟目录就行了。
这个目录下的文件及目录将被视为一个Web应用程序。
但是这样通过IIS添加Web应用程序是不会生成Webconfig文件的。
如果想创建一个带有Web.config文件的Web应用程序需要使用VisualStudio.NET新建一个Web应用程序项目。
Web应用程序的配置文件Web.config是可选的可有可无。
如果没有每个Web应用程序会使用服务器的Web.config配置文件。
如果有则会覆盖服务器Web.config配置文件中相应的值。
在SP.NET中Web.config修改保存后会自动立刻成效不用再像SP中的配置文件修改后需要重新启动Web应用程序才能生效了。
4.2Web.config文件中的Session配置信息打开某个应用程序的配置文件Web.config后发现上一段代码是配置应用程序如何存储Session信息的如表所示。
以下的各种操作主要是针对这一段配置展开。
先看看这一段配置中所包含的内容。
sessionState节点的语法是这样的sssionStatmodOffInProcStatSrvrSQLSrvrcookilsstrufalstimoutnumbrofminutsstatonnctionStringtcpipsrvr:portsqlonnctionStringsqlconnctionstringstatNtworkTimoutnumbrofsconds/4.3客户端Session状态的存储在上面的Session模型简介中可以发现Session状态应该存储在两个地方分别是客户端和服务器端。
客户端只负责保存相应网站的SessionID而其他的Session信息则保存在服务器端。
在
ASP中客户端的SessionID实际是以Cookie的形式存储的。
如果用户在浏览器的设置中选择了禁用Cookie那么就无法享受Session的便利之处了甚至造成不能访问某些网站。
为了解决以上问题在
ASP.NET中客户端的Session信息存储方式分为Cookie和Cookieless两种。
ASP.NET中默认状态下在客户端还是使用Cookie存储Session信息。
4.4服务器端Session状态的存储4.4.将服务器Session信息存储在进程中Web.config文件中modeInProc就是这种模式这种方式和以前SP中的模式一样就是服务器将Session信息存储在IIS进程中。
当IIS关闭、重启后这些信息都会丢失。
但是这种模式最大好处就是性能最高。
因为所有的Session信息都存储在了IIS的进程中所以IIS能够很快地访问到这些信息这种模式也是SPNET的默认方式。
442将服务器Session信息存储在进程外首先来打开管理工具-服务找到名为ASPNETStateService的服务启动它。
实际上这个服务就是启动一个要保存Session信息的进程。
启动这个服务后可以从Windows任务管理器-进程中看到一个名为aspnet_stateexe的进程这个就是要保存Session信息的进程。
将Webconfig文件中mode的值改为StateServer。
保存文件后的重新打开一个IE打开SessionStateaspx页面保存一些信息到Session中。
这属性设置将Session信息存储在状态服务中时使用的服务器名称和端口号例如tcpip2700:42424。
当mode的值是StateServer时这个属性是必需的。
设置与SQLServer连接时的连接字符串。
例如datasourcelocalhostIntegratedSecuritySSPIInitialCatalognorthwind。
当mode的值是SQLServer时这个属性是必需的。
设置当使用StateServer模式存储Session状态时经过多少秒空闲后断开Web服务器与存储状态信息的服务器的TCP/IP连接的。
默认值是0秒钟。
设置经过多少分钟后服务器自动放弃Session信息。
默认为20分钟使用Cookie模式这是默认值。
使用Cookieless模式设置客户端的Session信息存储到哪里设置将Session存储在SQLServer中。
设置为将Session存储在独立的状态服务中。
设置为将Session存储在进程内就是
ASP中的存储方式默认值。
设置为不使用Session功能设置将Session信息存储到哪里描述选项OffInProcStateServerSQLServerturefalseMode必须cookielesstimeoutstateConnectionStringsqlConnectionStringstateNetworkTimeout表45201.02电脑编程技巧与维护根据实验室科研管理系统的应用要求在实验实验室原本存在的网络结构的基础上本系统计算机网络拓扑结构采用星型结构以光纤和五类双绞线作为通信介质采用交换式快速以太网10BaseT进行组网。
在网络中心配置一台高性能的快速交换集线器SWITCH将网络分成若干网段每个网段配备适当数量的二级交换机或HUB和工作站。
整个网络以中心交换机为核心构成层次或星型结构。
6结语系统地介绍了系统的设计过程、开发流程、测试与维护方法。
文中对各个阶段进行了深入的剖析用系统流程图和部署图给出了系统清晰准确的开发过程系统内部的详细配置和结构特征。
另外在文中还充分展示了各用户所分配的功能以及系统运行过程中所集成的性能和表现的优势。
从总体上作者利用文本对实验室管理系统进行了全面和系统的介绍。
参考文献1RogerS.Pressman著郑人杰马素霞白晓颖译.第6版.机械工业出版社26.2JamesRumbaughIvarJacobsonGradyBooch著.第2版.机械工业出版社25.3郑人杰.清华大学出版1997.上接第1页时重启IIS再回到SessionState.aspx页面中查看刚才的Session信息发现没有丢失。
实际上这种将Session信息存储在进程外的方式不光指可以将信息存储在本机的进程外还可以将Session信息存储在其他的服务器的进程中。
这时不光需要将mode的值改为StateServer还需要在stateConnectionString中配置相应的参数。
例如计算是1.64.96.15把Session存储在IP为1.64.96.16的计算机的进程中就需要设置成这样stateConnectionStringtcpip1.64.96.16:42424。
当然不要忘记在1.64.96.16的计算机中装上.NETFramework并且启动ASPNETStateServices服务。
4.4.3将服务器Session信息存储在SQLServer中启动SQLServer和SQLServer代理服务。
在SQLServer中执行一个叫做InstallSqlState.sql的脚本文件。
这个脚本文件将在SQLServer中创建一个用来专门存储Session信息的数据库及一个维护Session信息数据库的SQLServer代理作业。
可以在以下路径中找到那个文件c:winntMicrosoftNETFrameworkversion然后打开查询分析器连接到SQLServer服务器打开刚才的那个文件并且执行。
稍等片刻数据库及作业就建立好了。
这时可以打开企业管理器看到新增了一个叫ASPState的数据库。
但是这个数据库中只是些存储过程没有用户表。
实际上Session信息是存储在了tempdb数据库的ASPStateTempSessions表中的另外一个ASPStateTempApplications表存储了
ASP中Application对象信息。
这两个表也是刚才的那个脚本建立的。
另外查看管理-SQLServer代理-作业发现也多了一个叫做ASPState_Job_DeleteExpiredSessions的作业这个作业实际上就是每分钟去ASPStateTempSessions表中删除过期的Session信息的。
接着返回到Web.config文件修改mode的值为SQLServer。
注意还要同时修改sqlConnectionString的值格式为sqlConnectionStringdatasourcelocalhostIntegratedSecuritySSPI其中datasource是指SQLServer服务器的IP地址如果SQLServer与IIS是一台机子写127...1就行了。
IntegratedSecuritySSPI的意思是使用Windows集成身份验证这样访问数据库将以
ASP.NET的身份进行通过如此配置能够获得比使用useridsapassword口令的SQLServer验证方式更好的安全性。
当然如果SQLServer运行于另一台计算机上可能会需要通过ActiveDirectory域的方式来维护两边验证的一致性。
同样做个试验。
向SessionState.aspx中添加Session信息这时发现Session信息已经存在SQLServer中了即使重启计算机刚才的Session信息也不会丢失。
5Session与Cookies的区别经过上面的讨论可能有人要问Session的功能cookies也能完成二者有什么区别呢二者的确很相象甚至有人认为它们就是一类东西其实它们还是有区别的Cookie是Web服务器保存在用户硬盘上的一段文本。
Cookie允许一个Web站点在用户的电脑上保存信息并且随后再取回它。
信息的片断以‘名/值’对name-valuepairs的形式储存相对于浏览器而言它有独立性即使客户端浏览器或计算机关闭cookies仍然存在。
而Session却依赖于浏览器如果浏览器关闭则Session信息自动丢失而且要想在多个页面上共享Session信息这些页面必须是相互关联的。
6结语综上所述在Session的管理和维护上
ASP.NET有了很大的进步可以更加随意地挑选适合的方法了根本不用继续去考虑客户端的Cookie选项的状态因为不管客户端的设置如何Session都可以顺利地传递对于企业级的应用来说这无疑对于服务器的同步、服务器的稳定性、可靠性和安全性都是有利的。
在开发数字地宫项目和财务预算项目的过程中用户认证都用到了
ASP.NETSession功能。
参考文献1ChrisGoodeJohnKauffman等杨浩.
ASP.NET1.入门经典.清华大学出版社.2AlexFerraraMattbewMacDonald天宏工作室..NETWeb服务编程.清华大学出版社................................................................46
上一篇:
ASPNET应用程序中网页重定向及其数据传递技巧
下一篇:
《星际穿越》青岛展示五维空间 太空穿越挑战影迷智力