1.概念
ASP.NET的应用最开始是部署在企业内部,登录之后才能访问。如果用户直接访问非登录页,网站会先校验用户是否已登录,如果答案是否,网站认为当前的访问是未经授权的,网站立即跳转到登录页,登录之后跳转到之前访问的页面。这种以登录表单作为认证的方式就是表单认证(Form Authentication)
表单认证是最简单的认证方式,优点是配置十分简单,缺点是所有的页面(除登录页)必须经过授权,所以这种认证方式不适合互联网应用。表单认证实际上是在客户端写如一个Cookie的值,当浏览器关闭后再次访问时就需要再次认证。当然,也可以设置为持久化的Cookie,浏览器关闭后再次访问会去查是否存在相应的Cookie,如果存在则不需要再次登录,这种情况下安全度较低,所以通常是非持久化Cookie。
2.示例
1)建立工程
2)配置文件
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<authentication mode="Forms">
<forms loginUrl="MyLogin.aspx"></forms>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</configuration>
这里的deny表示拒绝,user="?"表示所有的用户,所以这句话的意思是所有的用户都不可以直接访问非登录页。
3)页面
登录页
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<link href="Content/bootstrap.css" rel="stylesheet" />
</head>
<body>
<form id="form1" runat="server">
<div class="container">
<br />
<asp:Label ID="LblUsername" runat="server" Text="Username:"></asp:Label>
<asp:TextBox ID="TboUsername" runat="server"></asp:TextBox>
<br /><br />
<asp:Label ID="LblPassword" runat="server" Text="Password:"></asp:Label>
<asp:TextBox ID="TboPassword" runat="server"></asp:TextBox>
<br /><br />
<asp:Button ID="BtnLogin" runat="server"
OnClick="BtnLogin_Click" Text="Button" Width="198px" />
</div>
</form>
</body>
</html>
默认页
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
This is default page!
</div>
</form>
</body>
</html>
登录页逻辑
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace AspNetAuthentication
{
public partial class Login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void BtnLogin_Click(object sender, EventArgs e)
{
if (TboUsername.Text == "admin" && TboPassword.Text == "12345")
{
/*
* 为用户名创建一个身份验证票据,并将其添加到响应的Cookie中
* SetAuthCookie的第一个参数为已验证的用户的名称。
* SetAuthCookie的第二个参数为true时代表创建持久Cookie
*(跨浏览器会话保存的 Cookie),为false则关闭浏览器后要重新验证身份
*/
FormsAuthentication.SetAuthCookie(TboUsername.Text, false);
}
//如果URL中没有传递ReturnUrl参数,则跳转到Default.aspx,
//否则跳转到ReturnUrl参数值指定的网页
Response.Redirect(string.IsNullOrEmpty(Request.QueryString["ReturnUrl"])
? "Default.aspx"
: Request.QueryString["ReturnUrl"]);
}
}
}
3.效果
1)直接访问Default.aspx
登陆之后