一般网站后台页面除了登录页面login.aspx未登录用户可访问外,其它页面必须登录用户才可访问,
当用户未登录时进入某个页面则自动判断并跳转到登录页面:
(如果login.aspx页面用到图片及Css、Js文件,那么也必须允许未登录用户可访问Images、Css、Js文件夹)
方法一:运用页面基类BasePage.cs
1、BasePage.cs代码:
view source print ? 01/* 02 * 创建人:余泳彬 03 * 创建时间:2011-1-17 11:13:32 04 * 说明:页面基类 05 * 版权所有:余泳彬 06 */ 07using System; 08using System.Collections.Generic; 09using System.Web; 10 11namespace Common 12{ 13 /// <summary>页面基类</summary> 14 public class BasePage : System.Web.UI.Page 15 { 16 17 /// <summary> 18 /// 应用程序路径 如:/YongbinWeb/ 或 / 19 /// </summary> 20 public string ApplicationPath 21 { 22 get 23 { 24 string path = HttpContext.Current.Request.ApplicationPath.ToString(); 25 if (path.Trim() != "/") // 判断路径是否为“/” 26 { 27 path += "/"; 28 } 29 return path; 30 } 31 } 32 33 34 /// <summary> 35 /// 重写页面预处理事件(在页面初始化开始时引发) 36 /// 验证用户是否登录 37 /// </summary> 38 protected override void OnPreInit(EventArgs e) 39 { 40 //判断会员是否登录,若未登录则跳转到登陆页面 41 if (Session["admin"] == null) 42 { 43 this.Response.Redirect(ApplicationPath + "/admin/login.aspx", true); 44 return; 45 } 46 base.OnPreInit(e); 47 } 48 49 } 50}
2、后台需设置权限的页面.aspx.cs代码(继承BasePage类即可):
view source print ? 1public partial class admin_ad_edit : BasePage 2{ 3 protected void Page_Load(object sender, EventArgs e) 4 { 5 6 } 7}
方法二:运用.Net内置票据认证
view source print ? 01protected void Application_AuthenticateRequest(object sender, EventArgs e) 02 { 03 // .Net 内置票据认证代码 04 if (HttpContext.Current.User != null) 05 { 06 if (HttpContext.Current.User.Identity.IsAuthenticated) // 验证过的一般用户才能进行角色验证 07 { 08 if (HttpContext.Current.User.Identity is FormsIdentity) 09 { 10 FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity; 11 FormsAuthenticationTicket tiecket = id.Ticket; // 取得身份验证票 12 string userData = tiecket.UserData; // 从UserData中恢复role信息 13 string[] roles = userData.Split(','); // 将角色数据转成字符串数组,得到相关的角色信息 14 HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id, roles); // 这样当前用户就拥有角色信息了 15 } 16 } 17 } 18 19 }
2、 在web.config 文件中配置目录权限及登录页
登录页,在system.web节点中
view source print ? 1<!-- 2 票据认证配置:登陆页。 3 通过 <authentication> 节可以配置 ASP.NET 用来 4 识别进入用户的安全身份验证模式。 5--> 6<authentication mode="Forms"> 7 <forms name="mycook" loginUrl="Admin/login.aspx" protection="All" path="/"/> 8</authentication>
配置目录权限,在system.web节点外面
3、 在登录页的登录事件中的登录成功后拷入一段代码
view source print ? 01// 登陆事件 02protected void btnLogin_Click(object sender, ImageClickEventArgs e) 03{ 04 string name = txtName.Text.Trim(); // 用户名 05 string pwd = txtPassWord.Text.Trim(); // 密码 06 if (name == "yongbin" && pwd == "123456") 07 { 08 // 登录成功,内置票据认证拷入代码 09 HttpCookie cook; 10 string strReturnURL; // 登录成功后返回的URL 11 string roles = "admin"; // 用户角色 12 // 建立身份验证票对象 13 FormsAuthenticationTicket ticket = new FormsAuthenticationTicket( 14 1, name, DateTime.Now, DateTime.Now.AddMinutes(30), false, roles); 15 cook = new HttpCookie("mycook"); 16 cook.Value = FormsAuthentication.Encrypt(ticket); 17 Response.Cookies.Add(cook); 18 strReturnURL = Request.Params["ReturnUrl"]; 19 if (strReturnURL != null) 20 { 21 Response.Redirect(strReturnURL); 22 } 23 else 24 { 25 Response.Redirect("Default.aspx"); 26 } 27 28 } 29}
注:.Net票据认证是看了牛腩老师的《牛腩购物网》视频教程学会的,牛哥是个好人,课也讲得不错
推荐给大家:视频教程是收费的,但是非常便宜,只售¥30元,有兴趣的可以他的淘宝店购买:牛腩的淘宝网店
view source print ? 01<!--票据认证配置:目录访问权限--> 02<location path="Admin"> 03 <system.web> 04 <authorization> 05 <allow roles="admin"/> <!--允许指定admin角色用户可访问--> 06 <deny users="*"/> <!-- 禁止所有非指定访问用户的访问--> 07 </authorization> 08 </system.web> 09</location> 10<!--所有用户均可访问登录页面--> 11<location path="Admin/login.aspx"> 12 <system.web> 13 <authorization> 14 <allow users="*"/> 15 </authorization> 16 </system.web> 17</location> 18<!--所有用户均可访问skin文件夹(css,images文件)--> 19<location path="Admin/skin"> 20 <system.web> 21 <authorization> 22 <allow users="*"/> 23 </authorization> 24 </system.web> 25</location>1、 在根目录建立一个全局应用程序类Global.asax文件,拷入一段代码: