日期:2012-11-06  浏览次数:20817 次


.NET平台及其ASP+所提供的强大开发功能是每个程序员所不能忽视的,对某种语言的偏好不该影响选择最具效率的开发工具。而目前,ASP+确实提供了许多JSP所无法比拟的功能。

  使用ASP+,你会真正感到使用语言的自由性,编程时在网页上可看到编译ASP+页中C#等语言时的全部编译信息,而且使用ASP+提供的数十种功能强大的服务器端控件,几乎可
以实现以前客户端RAD开发工具所能实现的全部功能,ASP+可以直接方便地使用.NET中的XML技术,使用几个简单的函数就可以用XML替代一些数据库或和其他程序交换信息。

  对于未来,将有越来越多的语言支持ASP+的开发,而富士通美国子公司已经推出了Cobol for .NET,让Cobol也可以开发ASP+应用程序了。惟一遗憾的是,ASP+目前还不能跑在除Windows系列的其他平台上,但这正是.NET正在做的事。

  基于上述优点,越来越多的Web应用将会使用ASP+方式开发,在具体实现如电子商务等应用时,必须重视各种安全性问题,此问题涉及操作系统、网络管理及程序安全等众多方面,限于篇幅,本文将介绍如何用ASP+的配置和程序实现安全身份验证。

  ASP+的相关配置

  ASP+的配置方法较特别,它使用config.web这个XML类型的文件来存储配置信息,你可用notepad或XML编辑器方便地修改其内容,规定的设置方式是子目录继承或者覆盖从父目录得来的配置设定,就是说在root目录下放了个config.web文件,那么任何下一级目录将自动继承这个文件中的配置,假如某个子目录需要另外的配置时,我们可再另建一个config.web放在该子目录下。这种配置管理方式对安装你的应用程序、配置的修改及安全管理都极为有利。

  ASP+提供了三种主要的身份验证方式即:Windows、Cookie和Passport,Windows是指使用Windows自身的安全管理方式,你可通过设置Windows的用户及IIS等权限来保障安全,对于一些大应用,使用此方法将非常复杂和烦琐。Passport方式较为方便和安全,用户只用一个用户名和密码可以访问任何成员站,并且在注销离开时,所有Passport相关的信息都会清除,你可以在公共场所放心地使用它,相信Passport比较适合Internet的应用。在企业级应用中,使用Cookie方式和SSL、IP限制等一些网管技术同样可以实现一定的安全性。

  下面介绍一下Cookie的配置:

  你需建一个如下内容的config.web,并将它放在C:inetpubwwwroot(IIS缺省目录)下,对于系统安装时已经建立的config.web,一般在WINNTMicrosoft.NETFrameworkv...目录下。

  <configuration>

  <security>

  <authentication mode="Cookie">

  <cookie decryptionkey="autogenerate" loginurl="/login.aspx" cookie=".ASPXAUTH" />

  </authentication>

  <authorization>

  <deny users="?" />

  </authorization>

  </security>

  </configuration>

  该配置文件声明用Cookie方式验证,在你访问该目录及其子目录下的aspx文件时,如果你没有认证的Cookie,它就会重定向到login.aspx。如果你需要一个不需要身份认证的目录(可放用户申请的程序)则可建一个如下的config.web并放在该目录下:

  <configuration>

  <security>

  <authorization>

  <allow users="*" />

  </authorization>

  </security>

  </configuration>

  程序设计

  你需在root目录下建立Default.aspx和login.aspx这两个ASP+程序。

  login.aspx程序内容如下:

  <%@ Import Namespace="System.Web.Security" %>

  <%@ Import Namespace="System.Data" %>

  <%@ Import Namespace="System.Data.ADO" %>

  <html>

  <head>

  <title>Login</title>

  <script language="C#" runat=server Debug="true">

  void Login_Click(Object sender, EventArgs e) {

  if(Page.IsValid)

  { ADODataReader dr;

  //连接数据库,用户名和密码放在ODBC连接的数据库QCDB中的表Users中

  ADOConnection cn = new ADOConnection("DSN=QCDB");

  cn.Open();

  ADOCommand cmdQuestion = new ADOCommand("SELECT Password FROM Usersswheresname = '" + YourName.Text + "'", cn);

  //选择相应用户信息

  cmdQuestion.Execute(out dr);

  //建一个datareader得到SQL结果

  if(dr.Read()) //得到对应的第一个行数据

  if(dr["Password"].ToString() == Password.Text)

  CookieAuthentication.RedirectFromLoginPage(YourName.Text, AbidingCookie.Checked);

  else //上面语句生成一个Cookie,如用户选择AbidingCookie,则永久保存Cookie

  Msg.Text = "密码错误";

  else

  Msg.Text = "用户名不存在";

  }

  }

  </script>

  </head><center><body>

  <ASP:Label id="Msg" ForeColor="red" Font-Name="Verdana";

  Font-Size="18" runat=ser