日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(5.5) 登录功能的实现,完善登录功能...

發(fā)布時(shí)間:2025/3/8 asp.net 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(5.5) 登录功能的实现,完善登录功能... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

索引

【無(wú)私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做項(xiàng)目 目錄索引

簡(jiǎn)述

今天我們來(lái)完善我們的登錄功能

項(xiàng)目準(zhǔn)備

我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5

希望大家對(duì)ASP.NET MVC有一個(gè)初步的理解,理論性的東西我們不做過(guò)多解釋,有些地方不理解也沒(méi)關(guān)系,會(huì)用就行了,用的多了,用的久了,自然就理解了。

項(xiàng)目開始

一、我們先來(lái)豐富一下登錄頁(yè)面

我隨便從網(wǎng)上Down了個(gè)登錄頁(yè),大家可以套上自己的登錄頁(yè),我們前面做了個(gè)簡(jiǎn)單的登錄頁(yè),只有用戶名和密碼,現(xiàn)在我們?cè)黾右粋€(gè)驗(yàn)證碼

首先,我們新建個(gè)驗(yàn)證碼的類?verify_code.cs ?我們就建在 Models文件夾下面吧

相信很多朋友都有驗(yàn)證碼的生成類,這里只給新手朋友提供一下參考

驗(yàn)證碼生成類

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 /// 驗(yàn)證碼構(gòu)造類 10 /// add yuangang by 2015-05-10 11 /// </summary> 12 public class verify_code 13 { 14 /// <summary> 15 /// 該方法用于生成指定位數(shù)的隨機(jī)數(shù) 16 /// </summary> 17 /// <param name="VcodeNum">參數(shù)是隨機(jī)數(shù)的位數(shù)</param> 18 /// <returns>返回一個(gè)隨機(jī)數(shù)字符串</returns> 19 private string RndNum(int VcodeNum) 20 { 21 //驗(yàn)證碼可以顯示的字符集合 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[] { ',' });//拆分成數(shù)組 26 string VNum = "";//產(chǎn)生的隨機(jī)數(shù) 27 int temp = -1;//記錄上次隨機(jī)數(shù)值,盡量避避免生產(chǎn)幾個(gè)一樣的隨機(jī)數(shù) 28 29 Random rand = new Random(); 30 //采用一個(gè)簡(jiǎn)單的算法以保證生成隨機(jī)數(shù)的不同 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));//初始化隨機(jī)類 36 } 37 int t = rand.Next(61);//獲取隨機(jī)數(shù) 38 if (temp != -1 && temp == t) 39 { 40 return RndNum(VcodeNum);//如果獲取的隨機(jī)數(shù)重復(fù),則遞歸調(diào)用 41 } 42 temp = t;//把本次產(chǎn)生的隨機(jī)數(shù)記錄起來(lái) 43 VNum += VcArray[t];//隨機(jī)數(shù)的位數(shù)加一 44 } 45 return VNum; 46 } 47 48 /// <summary> 49 /// 該方法是將生成的隨機(jī)數(shù)寫入圖像文件 50 /// </summary> 51 /// <param name="VNum">VNum是一個(gè)隨機(jī)數(shù)</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 //驗(yàn)證碼顏色集合 60 Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple }; 61 //驗(yàn)證碼字體集合 62 string[] fonts = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋體" }; 63 64 65 //定義圖像的大小,生成圖像的實(shí)例 66 Img = new Bitmap((int)VNum.Length * 18, 32); 67 68 g = Graphics.FromImage(Img);//從Img對(duì)象生成新的Graphics對(duì)象 69 70 g.Clear(Color.White);//背景設(shè)為白色 71 72 //在隨機(jī)位置畫背景點(diǎn) 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 //驗(yàn)證碼繪制在g中 80 for (int i = 0; i < VNum.Length; i++) 81 { 82 int cindex = random.Next(7);//隨機(jī)顏色索引值 83 int findex = random.Next(5);//隨機(jī)字體索引值 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)//控制驗(yàn)證碼不在同一高度 88 { 89 ii = 2; 90 } 91 g.DrawString(VNum.Substring(i, 1), f, b, 3 + (i * 12), ii);//繪制一個(gè)驗(yàn)證字符 92 } 93 ms = new MemoryStream();//生成內(nèi)存流對(duì)象 94 Img.Save(ms, ImageFormat.Jpeg);//將此圖像以Png圖像文件的格式保存到流中 95 96 //回收資源 97 g.Dispose(); 98 Img.Dispose(); 99 return ms; 100 } 101 } 102 } View Code

好,我們?cè)贏ccountController.cs下面新建一個(gè)生成圖片的二進(jìn)制圖片

好了,我們可以在登錄頁(yè)面插入這個(gè)圖片

帶驗(yàn)證碼的完整的 登錄頁(yè)面表單就好了

?

二、我們?cè)黾域?yàn)證碼的功能

首先我們獲取一下表單驗(yàn)證碼

然后我們應(yīng)該先判斷一下 我們的驗(yàn)證碼圖片是否過(guò)期 即 Session存儲(chǔ)的驗(yàn)證碼 是否存在

我們?cè)?Session存儲(chǔ)的驗(yàn)證碼沒(méi)有過(guò)期 即?Session["gif"] != null 里面判斷一下用戶輸入的驗(yàn)證碼是否正確

我們把我們的登錄驗(yàn)證 方法 放到 用戶驗(yàn)證碼輸入正確的方法體里面(如果用戶輸入的驗(yàn)證碼不正確,我們就沒(méi)有必要驗(yàn)證用戶信息了)

?

三、我們修改一下我們的驗(yàn)證方法

驗(yàn)證碼沒(méi)有過(guò)期,用戶輸入的驗(yàn)證碼正確,這種情況下我們就應(yīng)該驗(yàn)證用戶信息了,前幾篇我們已經(jīng)寫過(guò)驗(yàn)證功能了,我們來(lái)修改完善一下

上一篇,我們驗(yàn)證用戶信息真實(shí)的情況下,我們直接通過(guò)Json輸出了 Status="y",但是我們并沒(méi)有存儲(chǔ)用戶信息,今天我們來(lái)修改一下這個(gè)方法存儲(chǔ)用戶信息,我們通過(guò)兩種方式,首先通過(guò)Session存儲(chǔ)用戶信息,然后把用戶非關(guān)鍵信息加密后寫入Cookies,當(dāng)Session過(guò)期的時(shí)候,我們就通過(guò)Cookies重新獲取用戶并存儲(chǔ)用戶信息,這是大致的流程 很多朋友會(huì)說(shuō)這也不是很安全,是的,沒(méi)有絕對(duì)的安全,軟件是沒(méi)有絕對(duì)的100%安全的,我們只能在我們需求的情況下做到自己最好的安全。

我們?cè)谇耙徽聦懥藗€(gè)用戶類Account 描述用戶的詳細(xì)信息,包括部門、權(quán)限、崗位、角色等 我們通過(guò)用戶基礎(chǔ)表 來(lái)獲取一下這些信息

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

寫入當(dāng)前用戶到Session中

1 //寫入Session 當(dāng)前登錄用戶 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);

如果驗(yàn)證成功,我們跳轉(zhuǎn)到我們的管理中心首頁(yè)?

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

這樣,我們的登錄就OK了

?

OK,下一篇我們來(lái)做權(quán)限~~~

?

?

原創(chuàng)文章 轉(zhuǎn)載請(qǐng)尊重勞動(dòng)成果?http://yuangang.cnblogs.com

?

轉(zhuǎn)載于:https://www.cnblogs.com/yuangang/p/5522700.html

總結(jié)

以上是生活随笔為你收集整理的【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(5.5) 登录功能的实现,完善登录功能...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。