<fieldset>
<legend>用户登陆</legend>
<div>
用户名:<asp:TextBox ID="txtUserID" runat="server" Width="150" /><br /><br />
密 码:<asp:TextBox ID="txtUserPWD" runat="server" TextMode="Password" Width="150" /><br /><br />
<asp:CheckBox ID="cbSaveUserName" runat="server" Checked="true" Text="保持登录状态" />
</div><br />
<asp:Literal ID="ltMessage" Text="" runat="server" Visible="false" />
<br />
<p>
<asp:Button ID="btnLogin" Text="登陆" runat="server" OnClick="btnLogin_Click" />
</p>
</fieldset>
接下来完成后台代码,添加登陆按钮的后台处理方法:对用户名和密码进行验证,如果验证通过,则为用户名创建一个身份验证票据,并将其添加到响应的Cookie中。代码如下:
protected void btnLogin_Click(object sender, EventArgs e)
{
string userID = this.txtUserID.Text.Trim();
string userPWD = this.txtUserPWD.Text.Trim();
SampleUser userEx = SampleUser.GetUser(userID);
if (userEx == null)
{
ltMessage.Text = "用户不存在!";
ltMessage.Visible = true;
return;
}
if (userEx.UserPWD != userPWD)
{
ltMessage.Text = "用户名或密码错误,请重新输入!";
ltMessage.Visible = true;
return;
}
//添加票据,并将用户导航到默认页面
FormsAuthentication.RedirectFromLoginPage(userEx.UserName, this.cbSaveUserName.Checked);
}
完成这一步后,我们就已经完成了简单Froms验证的功能。运行程序,你会发现,这里存在一个问题!!!
你发现了吗?当我们被导航到login.aspx时,这个页面的样式丢失了!这是因为我们对整个网站的资源进行了访问限制,如果没有登陆,用户不仅无法访问.aspx页面,甚至连css文件、js文件都无法访问。显然,这不是我们想要的,因为这些资源并不是敏感的资源。在通常情况下,我们只希望对部分文件夹中的文件进行验证访问限制,而不是整个网站,例如,我们允许只对User文件夹下的页面进行访问限制,因为这个文件夹中存放的是用户的私人信息,这些信息是敏感的。这该如何实现呢?
为了完成演示分目录验证,我们在项目中添加一个User文件夹,并添加UserInfo.aspx、 UserLogin.aspx两个页面。UserInfo.aspx用来展示用户信息,它的业务逻辑我们不是我们关心的,UserLogin.aspx页面用来让用户登陆,代码跟Login.aspx页面几乎完全相同。
第一步:修改Web.config文件,允许匿名用户访问系统资源。
<authorization> <allow users="?"/> </authorization>
第二步:在User文件夹下添加一个Web.config文件,修改代码,拒绝匿名用户访问该文件夹下的资源。








