使用实现基于窗体的身份验证 本节说明如何添加和修改 <authentication> 和 <authorization> 配置部分,以此来配置 ASP.NET 应用程序使用基于窗体的身份验证。
从"项目资源管理器"中,打开 Web.config 文件。
将身份验证模式更改为窗体。
插入 <Forms> 标记,并填入相应的属性。(有关这些属性的更多信息,请参阅参考一节中列出的快速入门文档或 MSDN 文档。)复制以下代码,然后单击编辑菜单上的粘贴为 HTML,以粘贴文件 <authentication> 部分中的代码:
<authentication mode="Forms">
<forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx"
protection="All" path="/" timeout="30" />
</authentication>
在 <authorization> 部分中拒绝匿名用户的访问(如下所示):
<authorization>
<deny users ="?" />
<allow users = "*" />
</authorization>
创建 Logon.aspx 页
编写事件处理程序的代码,使其验证用户凭据
本节提供放置于代码隐藏页 (Logon.aspx.cs) 中的代码。
双击登录按钮,打开 Logon.aspx.cs 文件。
导入代码隐藏文件中所需的名称空间:
using System.Data.SqlClient;
using System.Web.Security;
您可以使用两种方法中的一种方法来生成窗体身份验证 Cookie,并将用户重定向到 cmdLogin_ServerClick 事件中相应的页。我们为两种情形都提供了示例代码。您可以根据自己的需要使用其中的一个。
在cmdLogin_ServerClick事件中调用 RedirectFromLoginPage 方法,以便自动生成窗体身份验证 Cookie,并将用户重定向到相应的页:
private void cmdLogin_ServerClick(object sender, System.EventArgs e)
{
if (ValidateUser(txtUserName.Value,txtUserPass.Value) )
FormsAuthentication.RedirectFromLoginPage(txtUserName.Value,
chkPersistCookie.Checked);
else
Response.Redirect("logon.aspx", true);
}
生成身份验证票,对它进行加密,创建 Cookie,将它添加到响应中并重定向用户。这使您能够更多地控制如何创建 Cookie。在本例中还可包括自定义数据( FormsAuthenticationTicket)。
private void cmdLogin_ServerClick(object sender, System.EventArgs e)
{
if (ValidateUser(txtUserName.Value,txtUserPass.Value) )
{
FormsAuthenticationTicket tkt;
string cookiestr;
HttpCookie ck;
tkt = new FormsAuthenticationTicket(1, txtUserName.Value, DateTime.Now,
DateTime.Now.AddMinutes(30), chkPersistCookie.Checked, "your custom data");
cookiestr = FormsAuthentication.Encrypt(tkt);
ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);
if (chkPersistCookie.Checked)
ck.Expires=tkt.Expiration;
Response.Cookies.Add(ck);string strRedirect;
strRedirect = Request["ReturnUrl"];
if (strRedirect==null)
strRedirect = "default.aspx";
Response.Redirect(strRedirect, true);
}
else
Response.Redirect("logon.aspx", true);
}
创建 Default.aspx 页
本节创建一个测试页,用户通过身份验证后将被重定向到该页。如果用户在没有先登录到应用程序的情况下浏览此页,他们将被重定向到登录页。
将现有 WebForm1.aspx 页重命名为 Default.aspx,并在编辑器中打开它。
切换到 HTML 视图,并将下面的代码复制到 <form> 标记之间:
<input type="submit" Value="SignOut" runat="server" id="cmdSignOut">
此按钮用于注销窗体身份验证会话。
切换到"设计"视图并保存该页。
导入代码隐藏文件中所需的名称空间:
using System.Web.Security;
双击 SignOut 打开代码隐藏页 (Default.aspx.cs),并在 cmdSignOut_ServerClick 事件处理程序中复制以下代码:
private void cmdSignOut_ServerClick(object sender, System.EventArgs e)
{
FormsAuthentication.SignOut();
Response.Redirect("logon.aspx", true);
}
从"项目资源管理器"中,打开 Web.config 文件。
将身份验证模式更改为窗体。
插入 <Forms> 标记,并填入相应的属性。(有关这些属性的更多信息,请参阅参考一节中列出的快速入门文档或 MSDN 文档。)复制以下代码,然后单击编辑菜单上的粘贴为 HTML,以粘贴文件 <authentication> 部分中的代码:
<authentication mode="Forms">
<forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx"
protection="All" path="/" timeout="30" />
</authentication>
在 <authorization> 部分中拒绝匿名用户的访问(如下所示):
<authorization>
<deny users ="?" />
<allow users = "*" />
</authorization>
创建 Logon.aspx 页
编写事件处理程序的代码,使其验证用户凭据
本节提供放置于代码隐藏页 (Logon.aspx.cs) 中的代码。
双击登录按钮,打开 Logon.aspx.cs 文件。
导入代码隐藏文件中所需的名称空间:
using System.Data.SqlClient;
using System.Web.Security;
您可以使用两种方法中的一种方法来生成窗体身份验证 Cookie,并将用户重定向到 cmdLogin_ServerClick 事件中相应的页。我们为两种情形都提供了示例代码。您可以根据自己的需要使用其中的一个。
在cmdLogin_ServerClick事件中调用 RedirectFromLoginPage 方法,以便自动生成窗体身份验证 Cookie,并将用户重定向到相应的页:
private void cmdLogin_ServerClick(object sender, System.EventArgs e)
{
if (ValidateUser(txtUserName.Value,txtUserPass.Value) )
FormsAuthentication.RedirectFromLoginPage(txtUserName.Value,
chkPersistCookie.Checked);
else
Response.Redirect("logon.aspx", true);
}
生成身份验证票,对它进行加密,创建 Cookie,将它添加到响应中并重定向用户。这使您能够更多地控制如何创建 Cookie。在本例中还可包括自定义数据( FormsAuthenticationTicket)。
private void cmdLogin_ServerClick(object sender, System.EventArgs e)
{
if (ValidateUser(txtUserName.Value,txtUserPass.Value) )
{
FormsAuthenticationTicket tkt;
string cookiestr;
HttpCookie ck;
tkt = new FormsAuthenticationTicket(1, txtUserName.Value, DateTime.Now,
DateTime.Now.AddMinutes(30), chkPersistCookie.Checked, "your custom data");
cookiestr = FormsAuthentication.Encrypt(tkt);
ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);
if (chkPersistCookie.Checked)
ck.Expires=tkt.Expiration;
Response.Cookies.Add(ck);string strRedirect;
strRedirect = Request["ReturnUrl"];
if (strRedirect==null)
strRedirect = "default.aspx";
Response.Redirect(strRedirect, true);
}
else
Response.Redirect("logon.aspx", true);
}
创建 Default.aspx 页
本节创建一个测试页,用户通过身份验证后将被重定向到该页。如果用户在没有先登录到应用程序的情况下浏览此页,他们将被重定向到登录页。
将现有 WebForm1.aspx 页重命名为 Default.aspx,并在编辑器中打开它。
切换到 HTML 视图,并将下面的代码复制到 <form> 标记之间:
<input type="submit" Value="SignOut" runat="server" id="cmdSignOut">
此按钮用于注销窗体身份验证会话。
切换到"设计"视图并保存该页。
导入代码隐藏文件中所需的名称空间:
using System.Web.Security;
双击 SignOut 打开代码隐藏页 (Default.aspx.cs),并在 cmdSignOut_ServerClick 事件处理程序中复制以下代码:
private void cmdSignOut_ServerClick(object sender, System.EventArgs e)
{
FormsAuthentication.SignOut();
Response.Redirect("logon.aspx", true);
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货