主要内容
接上一节
1. 当用户正常通过Login.aspx登陆页面正常登陆时,FormsAuthenticationFromLogin(string UserName,bool bl)方法却不知道指向何处时,页面就会报错?
解决办法:
判断页面地址栏的参数ReturnUrl是否为空
如果不为空:则使用FormsAuthenticationFromLogin(string UserName,bool bl)方法。
如果为空:则手动发送加密Cookie到客户端,再使用Response.Redirect()方法,定向到站点首页。
如实现代码:
if (tbName.Text.Trim() == "admin" && tbPwd.Text.Trim() == "123")
{
if (Request.QueryString["ReturnUrl"] != null)
{
this.Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), "<script>alert('登陆成功')</script>");
FormsAuthentication.RedirectFromLoginPage(tbName.Text.Trim(), chkRemember.Checked);
}
else {
FormsAuthentication.SetAuthCookie(tbName.Text.Trim(), chkRemember.Checked);
Response.Redirect("~/Admin/Index.aspx");
}
}
else
{
this.Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), "<script>alert('登陆失败')</script>");
}
2. 首页显示欢迎用户字符
使用的是web.security空间下的User属性下的标识中的用户名,也就是地址栏中ReturnUrl变量的值。
如:this.Label1.Text = User.Identity.Name;
3. 注销
即是将客户端的加密Cookie删除掉。
如:
FormsAuthentication.SignOut();
Response.Redirect("~/Login.aspx");
4. 讲解VS中的登陆相关的控件的使用
1. LoginName 就是能显示登陆用户名,如前面的欢迎字符串的显示
2. LoginStatus 就是登陆状态的操作,登陆、注销动作
自已测试其它相关控件的使用
5. web.config代码讲解:
<syste.web>
<authorization>//授权配置
<deny users="?" />拒绝所有匿名用户
<allow roles="admin" />允许admin角色
<deny users="*" />拒绝所有用户
</authorization>
</syste.web>
看上面的web.config文件中的授权代码,似乎有点问题,先是拒绝所有匿名用户,再允许admin角色的用户,最后是拒绝所有用户。
其实这里没有问题的,只是要明白的是,授权的配置中的顺序是很重要的,系统总是按照从前向后逐条匹配方式,执行最先的匹配者。
6. 常用的标签
1. 自定义错误配置标签
<customErrors mode="RemoteOnly"
//on表示启用自定义错误
//off表示禁用自定义错误
//remoteOnly表示只显示远程客户机,本地调试显示正常错误
defaultRedirect="ErrorPage.htm">
<error statusCode="404"
redirect="FileNotFound.htm" />//为对应错误状态码定向一个页面
//特定错误的错误页,statusCode为状态码,404错误代表页面不存在。
</customErrors>
默认VS2010 中是没有这个标签的。