第二个灵魂 发表于 2015-1-16 22:30:08

ASP.NET网页编程之从ASP.NET 1.1晋级到ASP.NET 2.0要思索...

那做企业软件是不是最好用J2EE?当你筹办将Web使用程序从ASP.NET1.1晋级到ASP.NET2.0,你将面临如许一个cookie成绩:在ASP.NET1.1使用程序中客户端保留的一切cookie将生效。
博客园也碰到了如许的成绩,对博客园来讲,意味着一切利用cookie的用户都必要从头登录,固然这不是一个很年夜的成绩,但切实其实给人人带来了贫苦,假如健忘了暗码,将加倍贫苦。
关于一个十分器重用户中意度的网站来讲,应当勉力往办理这个成绩。博客园但愿尽量削减晋级带来的影响,以是这两天我一向在研讨这个成绩并找到懂得决办法。
成绩的缘故原由是:当程序从ASP.NET1.1晋级到于ASP.NET2.0后,ASP.NET2.0利用新的算法与密钥对客户端发送过去的cookie举行解密,如许招致ASP.NET中天生的cookie在ASP.NET2.0中生效。在ASP.NET1.1中,利用3DES算法对cookie的内容举行加密,而在ASP.NET2.0中默许利用AdvancedEncryptedStandards(AES)算法举行解密,这是引发成绩的缘故原由之一,经由过程响应的设置能够将ASP.NET2.0中将cookie加密算法改成3DES,只需在web.config中加上:.但如许做以后成绩仍然存在,由于解密时除必要不异的算法,还必要不异的密钥。假如没有在machineKey中指定密钥,ASP.NET2.0会默许会利用随机天生的密钥,这个随秘密钥由System.Web.HttpRuntime.SetAutogenKeys()天生并存储于System.Web.HttpRuntime.s_autogenKeys中,经由过程反射你能够猎取这个值。ASP.NET1.1的machineKey是在machine.config中举行设置的,默许也是利用随秘密钥:.成绩就出在分歧的随秘密钥上。假如你在本来的ASP.NET1.1中指定了密钥,那就不存在这个成绩了,但一样平常在利用Webfarm时,才会思索这一点。以是一般情形都是利用随秘密钥。ASP.NET会为分歧的使用程序天生分歧的随秘密钥,这个客户端cookie生效成绩会出一在良多情形下,好比:重装体系、将ASP.NET使用程序移至别的一台盘算机,将Web使用程序移到分歧的假造目次中等等。
怎样办理这个成绩呢?
道理很复杂,只需我们晓得在ASP.NET1.1中随机天生的密钥的值,然后在ASP.NET2.0使用程序的web.config中举行指定就好了,这里的密钥有两个:一个是加密密钥decryptionKey,一个是散列盘算密钥validationKey(避免cookie被半途改动)。假设我们晓得密钥分离为:X、Y,那在web.config举行以下设置就可以办理成绩:而困难就在于怎样失掉ASP.NET1.1中随机天生的密钥的值。密钥存储在LSA(WindowsLocalSecurityAuthority)中,但我没找到能够从LSA猎取密钥的办法。
因为博客园次要是办理登录cookie的成绩,而这个cookie是在System.Web.Security.FormsAuthentication.SetAuthCookie(stringuserName,boolcreatePersistentCookie)中天生的,以是我就从ASP.NET1.1的System.Web.Security.FormsAuthentication的源代码动手,发明了System.Web.Configuration.MachineKey,经由进一步对MachineKey的源代码举行研讨,在MachineKey的MachineKeyConfig中发明了两个密钥分离存在于s_validationKey与s_oDes这两个公有静态成员中(发明这个费了很多工夫),validationKey的值间接存储于s_validationKey中,而decryptionKey存储于s_oDes.Key中。因为MachineKey是internalclass,MachineKeyConfig是公有范例,那两个成员是公有静态成员,没法间接会见。这时候,该是。NET中壮大的反射功效发扬感化的时分了。经由过程反射失掉这两个值,必要注重的是这两个值的范例是Byte[],经由过程测试发明间接转换成字符串天生的密钥有效,必要经由过程反射挪用System.Web.Configuration.MachineKey.ByteArrayToHexString(Byte[],Int32)转换成字符串。
明天早晨终究办理了这个成绩,好镇静!半途几回想保持,但想到在博客园程序晋级到ASP.NET2.0后,会由于这个成绩给良多人带来贫苦,固然只必要从头登录一下就好了,但我仍是以为要办理这个成绩,做程序开辟不就是尽量给用户带来便利吗?
办理了这个成绩就为博客园网站晋级到ASP.NET2.0作好了进一步的筹办。

据说很厉害,甚至可以把C#也干掉^_^,不过也很复杂,本来C++已经够复杂的。有人甚至还提出把这个东东引进标准,我觉得基本上不可能的。

分手快乐 发表于 2015-1-19 15:36:25

ASP.NET可以无缝地与WYSIWYGHTML编辑器和其他编程工具(包括MicrosoftVisualStudio.NET)一起工作。这不仅使得Web开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到Web页的GUI和完全集成的调试支持。微软为ASP.net设计了这样一些策略:易于写出结构清晰的代码、代码易于重用和共享、可用编译类语言编写等等,目的是让程序员更容易开发出Web应用,满足计算向Web转移的战略需要。

再现理想 发表于 2015-1-28 05:54:13

Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。

因胸联盟 发表于 2015-2-5 15:07:56

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

不帅 发表于 2015-2-12 10:12:44

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

爱飞 发表于 2015-3-3 02:55:25

主流网站开发语言之JSP:JSP和Servlet要放在一起讲,是因为它们都是Sun公司的J2EE(Java2platformEnterpriseEdition)应用体系中的一部分。

活着的死人 发表于 2015-3-11 09:10:22

Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。

精灵巫婆 发表于 2015-3-18 02:19:05

在调试JSP代码时,如果程序出错,JSP服务器会返回出错信息,并在浏览器中显示。这时,由于JSP是先被转换成Servlet后再运行的,所以,浏览器中所显示的代码出错的行数并不是JSP源代码的行数。

金色的骷髅 发表于 2015-3-25 09:43:26

ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。
页: [1]
查看完整版本: ASP.NET网页编程之从ASP.NET 1.1晋级到ASP.NET 2.0要思索...