简单窗体身份验证 ,分享

qieyj 2003-03-20 06:40:13
此示例展示 ASP.NET 窗体身份验证可能的最简单实现。
在此方案中,客户请求受保护的资源 Default.aspx。只有下面这一个用户可以获得对该受保护资源的访问权限:jdoe@somewhere.com,密码为 password。该用户名和密码已硬编码到 Login.aspx 文件。这里涉及三个文件:Default.aspx、Login.aspx 和 Web.config。
Web.config 配置文件
应设置 Web.config 配置文件以具有下列项,并将该配置文件放在应用程序根目录(Default.aspx 驻留的目录)中。

<configuration>
<system.web>
安装 Web.config 配置文件

将身份验证模式设置为 Forms。其他可能值为 Windows、Passport 和 None(空字符串)。对于此示例,它必须为 Forms。
<authentication mode="Forms" >
设置窗体身份验证属性。
<forms
将 loginUrl 属性设置为“login.aspx”。如果 ASP.NET 没有找到针对请求的窗体,则 Login.aspx 是用于重定向的 URL。
loginUrl = "login.aspx"
设置该窗体的名称后缀。
name = ".ASPXFORMSAUTH" />
拒绝未经身份验证的用户访问此目录。
</authentication>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</configuration>
Login.aspx 登录文件
Login.aspx 是当 ASP.NET 没有找到针对请求的窗体时,该请求被重定向到的文件。此 URL 在配置文件中设置。向客户端用户提供一个窗体。该窗体有两个文本框(“用户电子邮件名”和“密码”)和一个“提交”按钮。用户输入电子邮件名称和密码,然后单击“提交”按钮。然后代码将此名称和密码与硬编码在 If 语句中的相应对进行比较。如果比较成功,则将用户连接到 Default.aspx;如果失败,则向用户显示错误信息。

若要实现此功能

导入必需的命名空间。
<%@ Import Namespace="System.Web.Security " %>
设置脚本语言。
<html>
[C#]
<script language="C#" runat=server>
[Visual Basic]
<script language="VB" runat=server>
创建 Login_Click 事件处理程序来处理提交事件。
[C#]
void Login_Click(Object sender, EventArgs E) {
[Visual Basic]
Sub Login_Click(sender As Object, E As EventArgs)
通过对输入名称和密码与硬编码到代码中的名称和密码(jchen@contoso.com 和 password)进行比较来验证用户的身份。如果比较成功,则将请求重定向到受保护的资源 (Default.aspx)。如果比较失败,则显示错误信息。
[C#]
if ((UserEmail.Value == "jchen@contoso.com") &&
(UserPass.Value == "password"))
{
FormsAuthentication.RedirectFromLoginPage
(UserEmail.Value, PersistForms.Checked);
}
else
{
Msg.Text = "Invalid Credentials: Please try again";
}
}
</script>
[Visual Basic]
If ((UserEmail.Value = "jchen@contoso.com") And _
(UserPass.Value = "password")) Then
FormsAuthentication.RedirectFromLoginPage _
(UserEmail.Value, PersistForms.Checked)
Else
Msg.Text = "Invalid Credentials: Please try again"
End If
End Sub
</script>
显示窗体以收集登录信息。
<body>
<form runat=server>
<h3><font face="Verdana">Login Page</font></h3>

<table>
<tr>
创建“用户电子邮件名称”(User E-mail Name) 文本框。
<td>Email:</td>
<td><input id="UserEmail" type="text" runat=server/></td>
<td><ASP:RequiredFieldValidator
ControlToValidate="UserEmail"
Display="Static"
ErrorMessage="*"
runat=server/>
</td>

</tr>
<tr>
创建“密码”(Password) 文本框。
<td>Password:</td>
<td><input id="UserPass" type=password runat=server/></td>
<td><ASP:RequiredFieldValidator
ControlToValidate="UserPass"
Display="Static"
ErrorMessage="*"
runat=server/>
</td>
</tr>
<tr>
创建“持久性窗体”(Persistent Forms) 复选框。如果选中“持久性窗体”(Persistent Forms) 框,则该窗体将在浏览器会话之间有效。否则,在关闭浏览器时将销毁该窗体。
<td>Persistent Forms:</td>
<td><ASP:CheckBox id=PersistForms runat="server"
autopostback="true" />
</td>
<td></td>
</tr>

</table>
创建在回发时激发 Login_Click 事件的“提交”按钮。
<input type="submit" OnServerClick="Login_Click" Value="Login"
runat="server"/><p>
<asp:Label id="Msg" ForeColor="red" Font-Name="Verdana"
Font-Size="10" runat=server />

</form>
</body>
</html>
Default.aspx 文件
Default.aspx 文件是被请求的、受保护的资源。它是仅显示字符串 Hello、记录的电子邮件名称和“注销”(Signout) 按钮的简单文件。

[C#]
<%@ Page LANGUAGE="C#" %>
<html>
<head>
<title>Forms Authentication</title>

<script runat=server>
private void Page_Load(Object Src, EventArgs E )
{
Welcome.InnerHtml = "Hello, " + Context.User.Identity.Name;
}
private void Signout_Click(Object sender, EventArgs E)
{
FormsAuthentication.SignOut();
Response.Redirect("login.aspx");
}
</script>

<body>
<h3><font face="Verdana">Using Forms Authentication</font></h3>
<span id="Welcome" runat=server/>
<form runat=server>
<input type="submit" OnServerClick="Signout_Click" Value="Signout"
runat="server"/><p>
</form>
</body>
</html>
...全文
42 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
GOALSTAR 2003-03-21
  • 打赏
  • 举报
回复
谢谢

好人
甴曱 2003-03-21
  • 打赏
  • 举报
回复
Thank you!
lufly2000 2003-03-21
  • 打赏
  • 举报
回复
学习!
nmgrlt 2003-03-21
  • 打赏
  • 举报
回复
谢谢!
Kincad 2003-03-21
  • 打赏
  • 举报
回复
检宝^-^
Pasu_Player 2003-03-20
  • 打赏
  • 举报
回复
路过!
jiezhi 2003-03-20
  • 打赏
  • 举报
回复
look

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧