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