最近在做ASP.NET的項目時,接觸到了登陸權限模塊,所有總結了一下登陸時用到的知識和方法技巧。
如圖說明:實現的效果如圖,由於驗證碼驗證比較簡單這里就不介紹了
首先用代碼生成器生成項目,以三層為例進行說明, 那么我以BlogUser表為例,然后就會有一個BlogUser實體類對象。
登陸的思想:當我們登陸成功的時候要將實體存入到session中,免登陸也是這個思想,只不過是當我們勾選免登陸的時候,第一次登陸進去,那么將用戶的id存入到cookie中去,通過用戶的id查找用戶的實體,再賦值給session,那么session就不為空,就可以實現免登陸了。那么我們的BasePage又是什么呢?首先BasePage里面是其它頁面的父類,只有通過登陸才能讓用戶去訪問其它的頁面,那么我們就用到PageBase類,然后在BasePage進行判斷,如果Session為空,那么用戶沒登陸就跳轉到登陸頁面讓用戶登陸才能訪問其它頁面。
第一:前台登陸的主要代碼:
1 BlogUserBLL bll = new BlogUserBLL(); 2 //1.去數據庫判斷用戶名和密碼是否正確 3 List<BlogUser> list = bll.GetModelList("LoginName='" + name + "' and LoginPwd='" + md5Pwd + "'"); 4 //2.判斷用戶集合是否存在 6 if(list.Count>0) 7 { 8 //3.將用戶信息保存到session中 9 Context.Session["uInfo"] = list[0]; 10 //4.判斷用戶是否選中了記住登陸 11 if (!string.IsNullOrWhiteSpace(remember)) 12 { 13 //5.記住了就將用戶id存入cookie中 14 HttpCookie cookie = new HttpCookie(“uid”,list[0].Id.ToString()); 15 cookie.Expires = DateTime.Now.AddDays(3); 16 Context.Response.Cookies.Add(cookie); 17 } 18 Response.Write("<script>alert('登陸成功');window.location='BlogList.aspx'</script>"); 19 } 20 else 21 { 22 Response.Write("<script>alert('登陸失敗,請重新登陸');window.location='/Login.aspx'</script>"); 23 } 24 Response.End();
第二:PageBase類,首先這個類要繼承System.Web.UI.Page,其實這個類主要是重寫了一個方法,這涉及到aspx頁面的生命周期和一系列的管道事件,簡單的來說吧,這相當於一個過濾器,當你請求其它頁面(要登陸之后才能訪問),那么它們都繼承這個頁面,會先在這個頁面判斷你是否有登陸,如果沒有登陸,那么就跳轉到登陸頁面去。
主要代碼
1 protected override void OnInit(EventArgs e) 2 { 3 if (Session["uInfo"] == null) 4 { 5 //1.判斷用戶是否勾選記住三天免登陸 6 if (Request.Cookies[“uid”] != null) 7 { 8 BlogUserBLL bll = new BlogUserBLL(); 9 //2.通過cookie里傳人的數據得到數據實體 10 BlogUser umodel = bll.GetModel(int.Parse(Request.Cookies["uid"].Value)); 11 //3.將實體存入session中 12 Session["uInfo"] = umodel; 13 return; 14 } 15 //4.跳轉到登陸頁面 16 Response.Redirect("/Login.aspx"); 17 } 18 base.OnInit(e); 19 }
注意:BasePage是針對於aspx頁面的,那么ashx頁面,我們又會有另外一個父類,是BaseHandler,原理差不多,寫法還是有點區別,如果大家感興趣的可以聯系我,我可以發給大家,還有哪里有不清楚的也可以留言。