程序设计
你需在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 Users WHERE name = "" + 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=server />
<form runat=server>
<table><tr><td><ASP:label text="用户名: " runat=server/></td>
<td><ASP:textbox id="YourName" runat=server /></td>
</tr><tr><td><ASP:label text="密码:" runat=server/></td>
<td><ASP:textbox id="Password" TextMode="Password" runat=server /></td>
<td><ASP:button id="btnLogin" Text="确定" OnClick="Login_Click" runat=Server /></td>
<td> </td></tr><tr><td>希望下次不用输入密码</td>
<td><ASP:CheckBox id=AbidingCookie runat="server" /> </td>
<td></td></tr></td><td></td></tr></table>
</form></td> <td width="283" height="1" bgcolor="#F0F0F0"></td>
</tr></table></center></div><p></p></body>
</html>
Default.aspx程序内容如下:
<%@ Page LANGUAGE="c#" %>
<html><head><title>欢迎来到.NET的世界</title>
<script runat=server>
private void Page_Load(Object Src, EventArgs E )
{ Welcome.InnerHtml = "祝贺你通过身份验证" + Context.User.Identity.Name;
} private void Signout_Click(Object sender, EventArgs E)
{ CookieAuthentication.SignOut();
//按下SignOut按键清除原Cookie
Response.Redirect("login.aspx");
//让用户重输入新用户名、密码
}
</script><body><center>
<h3><font face="Verdana">.NET身份验证系统提示你</font></h3>
<span id="Welcome" runat=server/><form runat=server>
<input type="submit" OnServerClick= "Signout_Click" Value="取消该登录身份" runat="server"/><p>
</form><p><a href="/adduser/">进入管理室</a></p></center></body></html>
具体执行时,当一个未经认证的用户浏览你的网站的.aspx文件时(注意,Cookie认证只对.aspx文件起作用),系统发现该用户没Cookie,于是将它重定向到login.aspx,当用户输入正确的用户名和密码后,系统为该用户生成一个Cookie并立刻自动重定向到一开始该用户要浏览的.aspx文件并执行它,缺省的则定向到Default.aspx,上面提供的Default.aspx则提示你已经通过身份认证。
总结
由于我们使用了Session跟踪应用程序访问或会话期间特定的Web浏览器信息,带有相应的 cookie 的HTTP请求被认为是来自同一Web浏览器,所以要防止被人使用Sniffer等方法非法截获Cookie信息,你需要考虑使用SSL或其他安全的通讯链路加密方法。
对于上述程序,你可以方便地在Table中加入用户IP地址的信息,来验证Intranet用户。由于Cookie就像一个身份证,为防止有人非法使用你的Cookie,应该让Cookie随着浏览器的关闭一起清除。
总之,使用Cookie的身份验证方法再结合各种加密手段以及操作系统完善的安全配置就可以为大多数需要安全认证的应用提供足够的支持。