冷月葬花魂 发表于 2015-1-16 22:35:22

ASP.NET网页设计从ASP.NE T 1.1晋级到ASP.NET 2.0必要考...

效率会有不少的变化。而实际上java是基于堆栈机器来设计,这和我们常见的基于寄存器的本地机器是差异比较大的。总体来说,这是一种虚拟机的设计思路。asp.net|cookie|成绩  当你筹办将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中加上:<machineKeydecryption="3DES"/>。但如许做以后成绩仍然存在,由于解密时除必要不异的算法,还必要不异的密钥。假如没有在machineKey中指定密钥,ASP.NET2.0会默许会利用随机天生的密钥,这个随秘密钥由System.Web.HttpRuntime.SetAutogenKeys()天生并存储于System.Web.HttpRuntime.s_autogenKeys中,经由过程反射你能够猎取这个值。ASP.NET1.1的machineKey是在machine.config中举行设置的,默许也是利用随秘密钥:
<machineKeyvalidationKey="AutoGenerate,IsolateApps"decryptionKey="AutoGenerate,IsolateApps"validation="SHA1"/>。
  成绩就出在分歧的随秘密钥上。假如你在本来的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
举行以下设置就可以办理成绩:
<machineKeyvalidationKey="X"decryptionKey="Y"decryption="3DES"/>
而困难就在于怎样失掉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作好了进一步的筹办。
效率会有不少的变化。而实际上java是基于堆栈机器来设计,这和我们常见的基于寄存器的本地机器是差异比较大的。总体来说,这是一种虚拟机的设计思路。

飘飘悠悠 发表于 2015-1-17 15:55:52

ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。

小魔女 发表于 2015-1-20 19:59:36

asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源

若相依 发表于 2015-1-29 19:40:07

我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。

小女巫 发表于 2015-2-6 03:40:08

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

飘灵儿 发表于 2015-2-15 11:28:15

提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。

冷月葬花魂 发表于 2015-3-4 11:27:26

JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。

愤怒的大鸟 发表于 2015-3-11 19:03:37

我的意思是.net好用,从功能上来说比JAVA强还是很明显的。

山那边是海 发表于 2015-3-19 08:57:51

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

金色的骷髅 发表于 2015-3-27 17:09:55

网页从开始简单的hmtl到复杂的服务语言,走过了10多个年头,各种技术层出不穷,单个的主流技术也在不断翻新的版本,现在分析下各种语言的区别、优势、劣势、开发注意事项!
页: [1]
查看完整版本: ASP.NET网页设计从ASP.NE T 1.1晋级到ASP.NET 2.0必要考...