【無私分享:從入門到精通ASP.NET MVC】從0開始,一塊兒搭框架、作項目(5.5) 登陸功能的實現,完善登陸功能

索引html

【無私分享:從入門到精通ASP.NET MVC】從0開始,一塊兒搭框架、作項目 目錄索引

簡述算法

今天咱們來完善咱們的登陸功能json

項目準備數組

咱們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5安全

但願你們對ASP.NET MVC有一個初步的理解,理論性的東西咱們不作過多解釋,有些地方不理解也不要緊,會用就好了,用的多了,用的久了,天然就理解了。cookie

項目開始框架

1、咱們先來豐富一下登陸頁面

我隨便從網上Down了個登陸頁,你們能夠套上本身的登陸頁,咱們前面作了個簡單的登陸頁,只有用戶名和密碼,如今咱們增長一個驗證碼dom

首先,咱們新建個驗證碼的類 verify_code.cs  咱們就建在 Models文件夾下面吧ide

相信不少朋友都有驗證碼的生成類,這裏只給新手朋友提供一下參考工具

驗證碼生成類

 1 using System.Drawing.Imaging;  2 using System.IO;  3 using System.Linq;  4 using System.Web;  5 
 6 namespace Models  7 {  8     /// <summary>
 9     /// 驗證碼構造類  10     /// add yuangang by 2015-05-10  11     /// </summary>
 12     public class verify_code  13  {  14         /// <summary>  
 15         /// 該方法用於生成指定位數的隨機數  16         /// </summary>  
 17         /// <param name="VcodeNum">參數是隨機數的位數</param>  
 18         /// <returns>返回一個隨機數字符串</returns>  
 19         private string RndNum(int VcodeNum)  20  {  21             //驗證碼能夠顯示的字符集合 
 22             string Vchar = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,p" +
 23                 ",q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,P,P,Q" +
 24                 ",R,S,T,U,V,W,X,Y,Z";  25             string[] VcArray = Vchar.Split(new Char[] { ',' });//拆分紅數組 
 26             string VNum = "";//產生的隨機數 
 27             int temp = -1;//記錄上次隨機數值,儘可能避避免生產幾個同樣的隨機數 
 28 
 29             Random rand = new Random();  30             //採用一個簡單的算法以保證生成隨機數的不一樣 
 31             for (int i = 1; i < VcodeNum + 1; i++)  32  {  33                 if (temp != -1)  34  {  35                     rand = new Random(i * temp * unchecked((int)DateTime.Now.Ticks));//初始化隨機類 
 36  }  37                 int t = rand.Next(61);//獲取隨機數 
 38                 if (temp != -1 && temp == t)  39  {  40                     return RndNum(VcodeNum);//若是獲取的隨機數重複,則遞歸調用 
 41  }  42                 temp = t;//把本次產生的隨機數記錄起來 
 43                 VNum += VcArray[t];//隨機數的位數加一 
 44  }  45             return VNum;  46  }  47 
 48         /// <summary>  
 49         /// 該方法是將生成的隨機數寫入圖像文件  50         /// </summary>  
 51         /// <param name="VNum">VNum是一個隨機數</param>  
 52         public MemoryStream Create(out string VNum)  53  {  54             VNum = RndNum(4);  55             Bitmap Img = null;  56             Graphics g = null;  57             MemoryStream ms = null;  58             System.Random random = new Random();  59             //驗證碼顏色集合 
 60             Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };  61             //驗證碼字體集合 
 62             string[] fonts = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋體" };  63 
 64 
 65             //定義圖像的大小,生成圖像的實例 
 66             Img = new Bitmap((int)VNum.Length * 18, 32);  67 
 68             g = Graphics.FromImage(Img);//從Img對象生成新的Graphics對象 
 69 
 70             g.Clear(Color.White);//背景設爲白色  71 
 72             //在隨機位置畫背景點 
 73             for (int i = 0; i < 100; i++)  74  {  75                 int x = random.Next(Img.Width);  76                 int y = random.Next(Img.Height);  77                 g.DrawRectangle(new Pen(Color.LightGray, 0), x, y, 1, 1);  78  }  79             //驗證碼繪製在g中 
 80             for (int i = 0; i < VNum.Length; i++)  81  {  82                 int cindex = random.Next(7);//隨機顏色索引值 
 83                 int findex = random.Next(5);//隨機字體索引值 
 84                 Font f = new System.Drawing.Font(fonts[findex], 15, System.Drawing.FontStyle.Bold);//字體 
 85                 Brush b = new System.Drawing.SolidBrush(c[cindex]);//顏色 
 86                 int ii = 4;  87                 if ((i + 1) % 2 == 0)//控制驗證碼不在同一高度 
 88  {  89                     ii = 2;  90  }  91                 g.DrawString(VNum.Substring(i, 1), f, b, 3 + (i * 12), ii);//繪製一個驗證字符 
 92  }  93             ms = new MemoryStream();//生成內存流對象 
 94             Img.Save(ms, ImageFormat.Jpeg);//將此圖像以Png圖像文件的格式保存到流中  95 
 96             //回收資源 
 97  g.Dispose();  98  Img.Dispose();  99             return ms; 100  } 101  } 102 }
View Code

好,咱們在AccountController.cs下面新建一個生成圖片的二進制圖片

好了,咱們能夠在登陸頁面插入這個圖片

帶驗證碼的完整的 登陸頁面表單就行了

 

2、咱們增長驗證碼的功能

首先咱們獲取一下表單驗證碼

而後咱們應該先判斷一下 咱們的驗證碼圖片是否過時 即 Session存儲的驗證碼 是否存在

咱們在 Session存儲的驗證碼沒有過時 即 Session["gif"] != null 裏面判斷一下用戶輸入的驗證碼是否正確

咱們把咱們的登陸驗證 方法 放到 用戶驗證碼輸入正確的方法體裏面(若是用戶輸入的驗證碼不正確,咱們就沒有必要驗證用戶信息了)

 

3、咱們修改一下咱們的驗證方法

驗證碼沒有過時,用戶輸入的驗證碼正確,這種狀況下咱們就應該驗證用戶信息了,前幾篇咱們已經寫過驗證功能了,咱們來修改完善一下

上一篇,咱們驗證用戶信息真實的狀況下,咱們直接經過Json輸出了 Status="y",可是咱們並無存儲用戶信息,今天咱們來修改一下這個方法存儲用戶信息,咱們經過兩種方式,首先經過Session存儲用戶信息,而後把用戶非關鍵信息加密後寫入Cookies,當Session過時的時候,咱們就經過Cookies從新獲取用戶並存儲用戶信息,這是大體的流程 不少朋友會說這也不是很安全,是的,沒有絕對的安全,軟件是沒有絕對的100%安全的,咱們只能在咱們需求的狀況下作到本身最好的安全。

咱們在前一章寫了個用戶類Account 描述用戶的詳細信息,包括部門、權限、崗位、角色等 咱們經過用戶基礎表 來獲取一下這些信息

var acconut = this.UserManage.GetAccountByUser(users);

寫入當前用戶到Session中

1 //寫入Session 當前登陸用戶
2 SessionHelper.SetSession("CurrentUser", acconut);

記錄用戶ID、登陸名、密碼 到Cookies

1 //記錄用戶信息到Cookies
2  string cookievalue = "{\"id\":\"" + acconut.Id + "\",\"username\":\"" + acconut.LogName +
3                                                  "\",\"password\":\"" + acconut.PassWord + "\",\"ToKen\":\"" +
4                                                  Session.SessionID + "\"}"; 5  CookieHelper.SetCookie("cookie_rememberme", new Common.CryptHelper.AESCrypt().Encrypt(cookievalue),null);

咱們更新一下用戶本次登陸的IP

1  //更新用戶本次登陸IP
2  users.LastLoginIP = Utils.GetIP(); 3  UserManage.Update(users);

若是驗證成功,咱們跳轉到咱們的管理中心首頁 

json.ReUrl = "/Sys/Home/Index";

這樣,咱們的登陸就OK了

 

OK,下一篇咱們來作權限~~~

 

 

原創文章 轉載請尊重勞動成果 http://yuangang.cnblogs.com

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息
相關文章