登錄模塊設(shè)計(jì)_第1頁(yè)
登錄模塊設(shè)計(jì)_第2頁(yè)
登錄模塊設(shè)計(jì)_第3頁(yè)
登錄模塊設(shè)計(jì)_第4頁(yè)
登錄模塊設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第23章 登錄模塊設(shè)計(jì)登錄模塊能夠配合注冊(cè)模塊讓網(wǎng)站應(yīng)用能夠同用戶進(jìn)行信息交互,當(dāng)用戶在網(wǎng)站進(jìn)行注冊(cè)后,就需要登錄模塊進(jìn)行用戶登錄,登錄模塊雖然看上去比較容易,但是要比注冊(cè)模塊復(fù)雜一些,如身份處理,這些復(fù)雜的地方需要使用ASP.NET內(nèi)置對(duì)象。23.1 學(xué)習(xí)要點(diǎn)登錄模塊需要涉及到一些ASP.NET 3.5的基本知識(shí),如果要仔細(xì)學(xué)習(xí)注冊(cè)模塊的開發(fā),需要詳細(xì)了解本書的一些章節(jié)知識(shí),這些章節(jié)如下所示:q ASP.NET的網(wǎng)頁(yè)代碼模型。q Web窗體基本控件。q 數(shù)據(jù)庫(kù)基礎(chǔ)。q ADO.NET常用對(duì)象。q Web窗體數(shù)據(jù)控件。q ASP.NET內(nèi)置對(duì)象?;玖私饬艘陨险鹿?jié)的知識(shí)點(diǎn)后,就能夠熟練學(xué)習(xí)和開

2、發(fā)此模塊。23.2 系統(tǒng)設(shè)計(jì)登錄模塊需與注冊(cè)模塊不同的地方在于登錄模塊面向的用戶有兩種情況,一種是用戶已經(jīng)注冊(cè)了,另一種是用戶還沒(méi)有注冊(cè),對(duì)于沒(méi)有注冊(cè)的用戶需要引導(dǎo)到注冊(cè)頁(yè)面,而對(duì)于沒(méi)注冊(cè)的非法用戶必須進(jìn)行登錄限制。 模塊功能描述登錄模塊是配合注冊(cè)模塊的另一個(gè)非常重要的模塊,相比之下,登錄模塊需要考慮更多的情況,例如用戶是否注冊(cè),以及用戶是否是合法用戶,如果是合法用戶忘記密碼了怎么辦,如果是非法用戶,登錄了多次是否要進(jìn)行限制等等。登錄模塊的功能基本可以描述如圖23-1所示。圖23-1 登錄模塊基本用戶流程圖從登錄模塊可以看出,當(dāng)用戶進(jìn)行身份驗(yàn)證后,可能會(huì)出現(xiàn)幾種情況,包括驗(yàn)證通過(guò)、忘記密碼和循

3、環(huán)身份驗(yàn)證。如果用戶是一個(gè)正常的用戶,可以說(shuō)一次就能夠通過(guò)驗(yàn)證,那么這個(gè)用戶就可以進(jìn)行后續(xù)操作;如果用戶已經(jīng)是注冊(cè)的用戶,但是卻忘記了密碼,可以通過(guò)郵件確認(rèn)進(jìn)行密碼的索要;如果用戶是非法用戶,在不斷的進(jìn)行嘗試,那么就要禁止非法用戶的不斷嘗試。從上述流程基本上可以規(guī)劃以下幾個(gè)頁(yè)面:q 登錄頁(yè)面:提供用戶的主頁(yè)面。q 忘記密碼頁(yè)面:提供用戶索取密碼后提示的頁(yè)面。q 用戶信息頁(yè)面:提供用戶登錄成功后的個(gè)人信息頁(yè)面。在這其中最主要的是登錄頁(yè)面和忘記密碼頁(yè)面,其中很多的函數(shù)的實(shí)現(xiàn)都需要在這個(gè)頁(yè)面實(shí)現(xiàn),而其他頁(yè)面主要是作為提示頁(yè)面存在的。該模塊需要使用ASP.NET內(nèi)置對(duì)象對(duì)用戶的操作進(jìn)行保存和限制。22

4、.2.2 模塊流程分析在對(duì)業(yè)務(wù)進(jìn)行了基本的劃分之后,可以為模塊進(jìn)行基本的流程分析,包括這個(gè)模塊中最基本的函數(shù),以及這些函數(shù)在頁(yè)面中是如何執(zhí)行的。首先是登錄模塊需要提供哪些登錄信息,登錄模塊中最重要的就是用戶名和密碼,登錄模塊通常情況下通過(guò)用戶名和密碼進(jìn)行用戶權(quán)限的判斷。如果用戶登錄成功,那么用戶就是一個(gè)合法用戶,可以進(jìn)行后續(xù)的操作,如果用戶登錄失敗,則需要讓用戶選擇是否繼續(xù)登錄或者說(shuō)明忘記密碼,如果用戶反復(fù)嘗試則可以認(rèn)為這個(gè)用戶可能是非法用戶,需要禁止該用戶繼續(xù)進(jìn)行登錄。在了解了基本的模塊流程分析后,就可以進(jìn)行函數(shù)和頁(yè)面的劃分,如圖23-2所示。圖23-2 基本頁(yè)面的函數(shù)分析正如圖23-2所示

5、,這里主要起到作用的就是login.aspx頁(yè)面,這個(gè)頁(yè)面主要包括三個(gè)函數(shù)ifisuser、forget和forbidden,分別作為判斷用戶是否為正常用戶,以及判斷用戶是否忘記密碼和非法用戶等操作。在用戶正常登錄后,可以使用Redirect方法進(jìn)行頁(yè)面跳轉(zhuǎn),如果用戶忘記了密碼,需要使用發(fā)送郵件函數(shù)進(jìn)行郵件發(fā)送,如果用戶是非法用戶,則需要禁止用戶的登錄。23.3 數(shù)據(jù)庫(kù)設(shè)計(jì)對(duì)于登錄表同樣需要進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì),而登錄表的數(shù)據(jù)庫(kù)設(shè)計(jì)比較簡(jiǎn)單,只需要一個(gè)簡(jiǎn)單的用戶表就能夠進(jìn)行登錄設(shè)計(jì)。通常情況下注冊(cè)模塊和登錄模塊是一起協(xié)調(diào)合作的,登錄模塊讀取用戶表的信息而注冊(cè)模塊用于數(shù)據(jù)的索引和插入。 數(shù)據(jù)庫(kù)設(shè)計(jì)分析

6、對(duì)于數(shù)據(jù)庫(kù)設(shè)計(jì)分析,只需要簡(jiǎn)單的進(jìn)行用戶信息表的設(shè)計(jì)就可以了,但是這里需要使用用戶信息表中的郵箱信息進(jìn)行驗(yàn)證,所以數(shù)據(jù)庫(kù)中表的字段可以歸納如下:q 用戶名:用戶的用戶名,用于登錄使用。q 密碼:用戶的密碼,用于登錄中輸入密碼。q email:用戶的E-mail,用于發(fā)送郵件,如果用戶忘記了密碼就可以發(fā)送到該郵件。q QQ/MSN:用戶的QQ或MSN,用于連接。q 是否通過(guò):用戶的情況,用戶保存用戶信息,判斷用戶是否已經(jīng)被通過(guò)。這里最主要的字段是email和password,這兩個(gè)字段用于發(fā)送郵件到用戶和判斷用戶是否被通過(guò)。如果用戶忘記了密碼,可以封鎖該用戶的用戶信息然后發(fā)送郵件到用戶的郵箱中,

7、通過(guò)激活提示用戶密碼。 數(shù)據(jù)庫(kù)表的創(chuàng)建創(chuàng)建表可以通過(guò)SQL Server Management Studio視圖進(jìn)行創(chuàng)建也可以通過(guò)SQL Server Management Studio 查詢使用SQL語(yǔ)句進(jìn)行創(chuàng)建。登錄模塊的數(shù)據(jù)庫(kù)設(shè)計(jì)比較簡(jiǎn)單,這里創(chuàng)建一個(gè)Login數(shù)據(jù)庫(kù)并創(chuàng)建一個(gè)表,如圖23-3所示。圖23-3 數(shù)據(jù)庫(kù)表結(jié)構(gòu)正如圖23-3中所示,表為用戶的基本信息創(chuàng)建了字段,這些字段的意義分別為:q id:用于標(biāo)識(shí)用戶的ID號(hào),并為自動(dòng)增長(zhǎng)的主鍵。q username:用于標(biāo)識(shí)用戶名。q password:用于標(biāo)識(shí)用戶密碼。q email:用于標(biāo)識(shí)用戶E-mail信息。q msn:用于標(biāo)識(shí)

8、用戶的MSN等信息。q passed:用于標(biāo)識(shí)用戶是否通過(guò)審核。q ask:用于保存用戶提示信息的問(wèn)題。q answer:用于保存用戶提示信息的答案。上述字段描述了相應(yīng)的字段在實(shí)際應(yīng)用中的意義,創(chuàng)建表的SQL語(yǔ)句如下所示。 USE Login GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE dbo.Login(/創(chuàng)建Login表 bh int IDENTITY(1,1) NOT NULL, username nvarchar(50) COLLATE Chinese_PRC_CI_AS NULL, password

9、 nvarchar(50) COLLATE Chinese_PRC_CI_AS NULL, email nvarchar(50) COLLATE Chinese_PRC_CI_AS NULL, msn nvarchar(50) COLLATE Chinese_PRC_CI_AS NULL, passed nvarchar(50) COLLATE Chinese_PRC_CI_AS NULL, ask nvarchar(50) COLLATE Chinese_PRC_CI_AS NULL, answer nvarchar(50) COLLATE Chinese_PRC_CI_AS NULL, C

10、ONSTRAINT PK_Login PRIMARY KEY CLUSTERED ( bh ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY ) ON PRIMARY上述代碼創(chuàng)建了一個(gè)數(shù)據(jù)庫(kù)并將ID設(shè)為自動(dòng)增長(zhǎng)的主鍵,該數(shù)據(jù)庫(kù)用于保存用戶的基本信息,本模塊通常不會(huì)更改數(shù)據(jù)庫(kù)的信息,只是對(duì)數(shù)據(jù)庫(kù)進(jìn)行調(diào)用而已。所以在調(diào)用之前必須插入若干新數(shù)據(jù),示例代碼如下所示。 INSERT N

11、TO Login (username,password,email,msn,passed,ask,answer) alues ('guojing','123321','soundbbg','hellome',1,”你好嗎?,”我很好”)上述代碼在數(shù)據(jù)庫(kù)中插入了一條用戶名為guojing,密碼為123321的用戶信息,并且這個(gè)用戶的郵箱為,當(dāng)用戶忘記密碼時(shí),就會(huì)通過(guò)這個(gè)郵箱發(fā)送確認(rèn)信息。23.4 界面設(shè)計(jì)登錄界面也能夠吸引用戶眼球,在登錄界面也可以進(jìn)行廣告推廣,因?yàn)橐粋€(gè)網(wǎng)站的良好表現(xiàn)能夠讓用戶大量的在登錄頁(yè)面停駐,在登錄頁(yè)面進(jìn)行良好

12、的設(shè)計(jì)可以使登錄頁(yè)面具有廣告效應(yīng)也能夠提高用戶體驗(yàn)。 基本界面由于登錄模塊可能要考慮到很多的擴(kuò)展,包括廣告位之類的,登錄頁(yè)面也可以單獨(dú)進(jìn)行一個(gè)頁(yè)面的制作,這些頁(yè)面包括基本的TextBox和Label控件用于呈現(xiàn)基本的頁(yè)面信息,示例代碼見光盤中源代碼第23章23-123-1Default.aspx所示。上述代碼在頁(yè)面中使用了三個(gè)Label控件,用于顯示用戶登錄必須的信息,包括指引用戶如何填寫相應(yīng)的名稱,以及提示是否存在該用戶,該頁(yè)面還包括兩個(gè)TextBox控件用于用戶填寫相關(guān)的信息,并且為了驗(yàn)證用戶是否輸入正確,在頁(yè)面中使用了驗(yàn)證控件對(duì)用戶輸入進(jìn)行控制,示例代碼如下所示。 <asp:Req

13、uiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="用戶名不能為空"></asp:RequiredFieldValidator> <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessa

14、ge="密碼不能為空"></asp:RequiredFieldValidator>在注冊(cè)控件已經(jīng)說(shuō)明了,驗(yàn)證控件能夠驗(yàn)證用戶是否輸入的是合法的信息,如果用戶輸入的信息不合法或者輸入的信息為空,那么就不應(yīng)該讓操作繼續(xù)進(jìn)行,而需要讓用戶再次進(jìn)行信息輸入。在沒(méi)有CSS樣式控制的情況下,使用了表格進(jìn)行基本的布局,如圖23-4所示。圖23-4 基本界面布局 創(chuàng)建CSS為了更好的為頁(yè)面進(jìn)行頁(yè)面布局,可以使用CSS進(jìn)行頁(yè)面的樣式控制。在登錄頁(yè)面中,可以為頁(yè)面和控件進(jìn)行樣式控制,CSS示例代碼如下所示。body/定義全局 font-size:12px; font-fami

15、ly:Geneva, Arial, Helvetica, sans-serif; margin:0px 0px 0px 0px; background:gray;.top/定義頭部 background:white; margin:0px auto; margin-top:50px; padding-top:10px; padding-bottom:10px; padding-left:10px; width:490px; font-size:18px;.login/定義登錄 background:white; margin:0px auto; width:500px;.end/定義底部 ba

16、ckground:#f9fbfd; margin:0px auto; width:480px; text-align:center; padding:10px 10px 10px 10px;上述代碼定義了全局頁(yè)面的字體大小和字體屬性,并定義了頭部樣式、登錄主樣式和底部樣式,定義完成后如圖23-5所示。圖23-5 CSS樣式控制后的頁(yè)面上述頁(yè)面的布局非常鮮明,讓用戶一下就知道登錄窗口在哪里,但是這個(gè)布局并不方便擴(kuò)展,也不方便廣告位的布局。這里不詳細(xì)講解如何進(jìn)行廣告位布局,只是介紹如何對(duì)登錄頁(yè)面進(jìn)行樣式布局。23.4.3 發(fā)送密碼頁(yè)面對(duì)于登錄控件而言,需要兩個(gè)提示頁(yè)面,這兩個(gè)提示頁(yè)面包括發(fā)送密碼頁(yè)

17、面和錯(cuò)誤信息頁(yè)面。發(fā)送密碼頁(yè)面主要是用于發(fā)送忘記密碼的用戶的密碼到用戶的郵箱中,這樣用戶就能夠獲取相應(yīng)的信息以登錄網(wǎng)站;而錯(cuò)誤信息頁(yè)面主要是用于提示用戶輸入的次數(shù)超過(guò)限定的次數(shù),禁止用戶再次輸入。在這兩個(gè)頁(yè)面中,需要進(jìn)行事務(wù)處理的頁(yè)面只有發(fā)送密碼頁(yè)面,發(fā)送密碼頁(yè)面需要向指定的用戶的郵箱發(fā)送郵件,而在發(fā)送郵件前,必須讓用戶輸入用戶名才能夠發(fā)送。注意:在用戶忘記密碼后,必須讓用戶輸入用戶信息,然后在數(shù)據(jù)庫(kù)中查詢相應(yīng)的用戶的郵箱的信息,而不是直接讓用戶填寫郵箱。發(fā)送頁(yè)面示例代碼見光盤中源代碼第23章23-123-1Mail.aspx所示。其中,代碼創(chuàng)建了一個(gè)發(fā)送郵件頁(yè)面,當(dāng)用戶填寫用戶名后,系統(tǒng)會(huì)在

18、數(shù)據(jù)庫(kù)中查找相應(yīng)的用戶名的用戶信息,查找完成后會(huì)發(fā)送相應(yīng)的信息到用戶的郵箱中,如果用戶郵箱正確或者用戶提示信息正確,那么系統(tǒng)會(huì)發(fā)送信息到相應(yīng)郵箱,如果用戶郵箱不正確或者用戶提示信息不正確,系統(tǒng)則不會(huì)將密碼信息發(fā)送到用戶郵箱。頁(yè)面布局完成后如圖23-6所示。圖23-6 發(fā)送密碼頁(yè)面發(fā)送密碼頁(yè)面需要進(jìn)行業(yè)務(wù)處理,在發(fā)送密碼時(shí),必須填寫用戶名和用戶提示問(wèn)題以及答案,,才能夠保證此用戶是一個(gè)安全合法的用戶。23.5 代碼實(shí)現(xiàn)在完成基本的CSS頁(yè)面布局后,就需要進(jìn)行代碼實(shí)現(xiàn),登錄模塊的代碼實(shí)現(xiàn)比較復(fù)雜,不僅需要查詢相應(yīng)的用戶是否是合法用戶,當(dāng)用戶忘記密碼后,還需要通過(guò)郵件進(jìn)行密碼的索取,所以在代碼實(shí)現(xiàn)中

19、還需要實(shí)現(xiàn)郵件發(fā)送等功能。 登錄代碼實(shí)現(xiàn)在用戶進(jìn)行登錄時(shí),必須驗(yàn)證用戶是否已經(jīng)登錄,如果已經(jīng)登錄則不需要再次登錄,如果沒(méi)有登錄,則允許用戶進(jìn)行登錄操作,當(dāng)用戶單擊【登錄】按鈕時(shí),首先會(huì)驗(yàn)證用戶是否填寫信息,如果沒(méi)有填寫則提示用戶填寫,如果已經(jīng)填寫了,則判斷用戶是否是合法用戶。 protected void Button1_Click(object sender, EventArgs e) string str = "server='(local)'database='login'uid='sa'pwd='sa'"

20、;/連接數(shù)據(jù)庫(kù) SqlConnection con = new SqlConnection(str);/創(chuàng)建連接 con.Open();/打開連接 string strsql = "select * from login where username='"+TextBox1.Text+"' and password='"+TextBox2.Text+"'" SqlDataAdapter da = new SqlDataAdapter(strsql, con);/創(chuàng)建適配器 DataSet ds = ne

21、w DataSet();/創(chuàng)建數(shù)據(jù)集 int count=da.Fill(ds, "table");/填充數(shù)據(jù)集 if (count > 0)/登錄成功 Session"name" = TextBox1.Text;/賦予Session Session"password" = TextBox2.Text; /賦予Session Session"login" = "yes"/賦予Session else Label3.Text = "登錄失敗"/登錄失敗 當(dāng)需要判斷一個(gè)用戶

22、是否為合法用戶時(shí),只需要在數(shù)據(jù)庫(kù)中查詢出該用戶即可,如果查詢出該用戶,則說(shuō)明這個(gè)用戶是存在的;如果查詢不出該用戶,則說(shuō)明這個(gè)用戶是不存在的。查詢用戶可以使用ADO.NET的DataSet對(duì)象,示例代碼如下所示。 "select * from login where username='"+TextBox1.Text+"' and password='"+TextBox2.Text+"'" SqlDataAdapter da = new SqlDataAdapter(strsql, con);/創(chuàng)建適配器

23、 DataSet ds = new DataSet();/創(chuàng)建數(shù)據(jù)集 int count=da.Fill(ds, "table");/填充數(shù)據(jù)集上述代碼使用DataSet對(duì)象和SqlDataAdapter對(duì)象進(jìn)行數(shù)據(jù)填充,DataSet對(duì)象的Fill方法會(huì)返回受影響的行數(shù),當(dāng)執(zhí)行查詢語(yǔ)句時(shí),如果返回受影響的行數(shù)大于0,則說(shuō)明存在這個(gè)用戶,如果受影響的行數(shù)小于等于0,則說(shuō)明不存在該用戶。注意:在驗(yàn)證用戶時(shí)一定要同時(shí)進(jìn)行用戶名和密碼的判斷,如果不這樣判斷,很可能非法用戶會(huì)猜出用戶名就能夠進(jìn)行登錄。如果查詢出的結(jié)果大于0,則說(shuō)明用戶是合法用戶,可以為用戶賦予ASP.NET內(nèi)置對(duì)象

24、,以保存用戶狀態(tài),示例代碼如下所示。 Session"name" = TextBox1.Text;/賦予Session Session"password" = TextBox2.Text; /賦予Session Session"login" = "yes"/賦予Session上述代碼當(dāng)用戶登錄成功時(shí),給每個(gè)用戶一個(gè)Session對(duì)象,如果在一定時(shí)間內(nèi)不進(jìn)行操作或者用戶關(guān)閉了瀏覽器進(jìn)程,系統(tǒng)就會(huì)注銷該用戶。為了保證用戶無(wú)法重復(fù)多次進(jìn)行登錄,可以在登錄頁(yè)面添加一個(gè)計(jì)數(shù)器,這里可以使用一個(gè)Label控件進(jìn)行計(jì)數(shù)控制,La

25、bel控件可以設(shè)置為不可見,初始值為0,示例代碼如下所示。 <asp:Label ID="Label4" runat="server" Text="0" Visible="False"></asp:Label>在執(zhí)行登錄代碼時(shí),首先要判斷該控件的值。這里設(shè)置登錄4次后就無(wú)法登錄了,示例代碼如下所示。 if (Convert.ToInt32(Label4.Text) < 4) /登錄操作 /判斷操作如下 if (count > 0)/判斷登錄次數(shù) Session"name

26、" = TextBox1.Text;/賦予Session Session"password" = TextBox2.Text; /賦予Session Session"login" = "yes"/賦予Session else Label3.Text = "登錄失敗"/提示登錄失敗 int times = Convert.ToInt32(Label4.Text);/登錄次數(shù) Label4.Text = (times + 1).ToString();/登錄次數(shù)加一 else Label3.Text = &qu

27、ot;您已經(jīng)被禁止登錄,請(qǐng)稍后再登錄"/靜止登錄 上述代碼首先會(huì)判斷計(jì)數(shù)器中的值是不是小于4,如果小于4,則可以進(jìn)行登錄操作,否則就會(huì)禁止用戶登錄。在登錄失敗時(shí),必須讓計(jì)數(shù)器的值加1,否則計(jì)數(shù)器的值永遠(yuǎn)小于4。 郵件發(fā)送頁(yè)面在用戶需要索取自己的密碼時(shí),系統(tǒng)對(duì)用戶進(jìn)行郵件發(fā)送功能的實(shí)現(xiàn)和使用,這樣就保證了用戶信息的機(jī)密性,而用戶可以在自己的郵箱中獲取密碼。郵件發(fā)送示例代碼如下所示。 protected void TextBox1_TextChanged(object sender, EventArgs e) string str = "server='(local)&

28、#39;database='login'uid='sa'pwd='sa'"/創(chuàng)建連接字串 SqlConnection con = new SqlConnection(str);/創(chuàng)建連接對(duì)象 con.Open();/打開連接 string strsql = "select * from login where username='" + TextBox1.Text + "'"/編寫SQL語(yǔ)句 SqlDataAdapter da = new SqlDataAdapter(strsql

29、, con);/創(chuàng)建適配器 DataSet ds = new DataSet();/創(chuàng)建數(shù)據(jù)集 int count = da.Fill(ds, "table");/填充數(shù)據(jù)集 if (count > 0)/查找用戶 Label5.Text = ds.Tables"table".Rows0"ask".ToString();/提示用戶信息 Label2.Text = ""/清空錯(cuò)誤信息 else Label2.Text = "沒(méi)有這個(gè)用戶"/提示用戶信息 當(dāng)用戶填寫用戶名并失去焦點(diǎn)時(shí),系統(tǒng)會(huì)在

30、數(shù)據(jù)庫(kù)中查詢相關(guān)的用戶信息,如果包括該用戶,則會(huì)提示這個(gè)用戶的提問(wèn)信息;如果沒(méi)有這個(gè)用戶,則提示沒(méi)有這個(gè)用戶,如圖23-7所示。圖23-7 搜索用戶信息當(dāng)用戶填寫完用戶名和用戶提示問(wèn)題答案后,系統(tǒng)會(huì)判斷用戶答案是否正確,如果用戶的答案是正確的,就會(huì)發(fā)送郵件到用戶郵箱;如果用戶答案不正確,則會(huì)提示用戶再次輸入答案,示例代碼如下所示。 protected void Button1_Click(object sender, EventArgs e) string str = "server='(local)'database='login'uid='

31、sa'pwd='sa'"/創(chuàng)建連接字串 SqlConnection con = new SqlConnection(str);/創(chuàng)建連接對(duì)象 con.Open();/打開連接 string strsql = "select * from login where username='" + TextBox1.Text + "'"/配置SQL語(yǔ)句 SqlDataAdapter da = new SqlDataAdapter(strsql, con);/創(chuàng)建適配器 DataSet ds = new DataSe

32、t();/填充數(shù)據(jù)集 int count = da.Fill(ds, "table");/獲取數(shù)據(jù) if (count > 0)/如果存在用戶 if (TextBox2.Text != ds.Tables"table".Rows0"answer".ToString()/對(duì)比問(wèn)題 Label2.Text = "提示問(wèn)題答案回答出錯(cuò),請(qǐng)?jiān)俅屋斎氪鸢?"/出現(xiàn)錯(cuò)誤 else SendUserMail(ds.Tables"table".Rows0"email".ToString

33、(), /發(fā)送郵件 ds.Tables"table".Rows0"password".ToString();/實(shí)現(xiàn)郵件發(fā)送 else Label5.Text = "沒(méi)有這個(gè)用戶"/聲明沒(méi)有用戶 上述代碼會(huì)判斷用戶回答的問(wèn)題是否和本身用戶在注冊(cè)時(shí)設(shè)置的問(wèn)題相同,如果相同,就執(zhí)行SendUserMail函數(shù)。SendUserMail函數(shù)實(shí)現(xiàn)代碼如下所示。 private bool SendUserMail(string recevie,string password) try System.Net.Mail.SmtpClient clie

34、nt = new System.Net.Mail.SmtpClient(); client.Host = "SMTP服務(wù)器"/SMPT服務(wù)器信息 client.UseDefaultCredentials = false; client.EnableSsl = false; client.Credentials = new System.Net.NetworkCredential("郵件發(fā)送郵箱", "發(fā)送郵箱密碼"); client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod

35、.Network; System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage("郵件發(fā)送郵箱", recevie); message.Subject = "獲取密碼信息"/郵件的標(biāo)題 message.Body = "您的密碼為:"+password;/郵件的密碼 message.BodyEncoding = System.Text.Encoding.UTF8;/郵件的編碼形式 message.IsBodyHtml = true;/郵件內(nèi)容的形式 try

36、client.Send(message);/發(fā)送郵件 return true;/返回真 catch (Exception ex)/拋出異常 return false;/返回假 catch/不存在郵件服務(wù)器 return false;/返回假 上述代碼實(shí)現(xiàn)了郵件的發(fā)送功能,這個(gè)函數(shù)的參數(shù)為接受者的地址和密碼。在使用這個(gè)函數(shù)時(shí),SMPT服務(wù)器信息可以編寫服務(wù)器所需要的郵件服務(wù)器SMPT服務(wù)器。編寫完成SMPT服務(wù)器之后,只需要在上述代碼中編寫發(fā)送郵箱地址和發(fā)送郵箱密碼就能夠?qū)崿F(xiàn)郵箱的發(fā)送。注意:如果郵箱需要使用SSL安全證書才能夠進(jìn)行發(fā)送和接受,那么就需要配置對(duì)象的EnableSsl為true。例

37、如Gmail就需要配置EnableSsl。 根據(jù)不同的用戶顯示不同的內(nèi)容為了方便不同的用戶顯示不同的內(nèi)容,可以使用ASP.NET提供的內(nèi)置對(duì)象進(jìn)行編程和判斷,例如在登錄時(shí),如果登錄成功,則系統(tǒng)會(huì)為用戶配置一個(gè)Session內(nèi)置對(duì)象。Session內(nèi)置對(duì)象寄宿在用戶瀏覽器進(jìn)程內(nèi),如果用戶瀏覽器進(jìn)程關(guān)閉或者用戶長(zhǎng)時(shí)間沒(méi)有操作,則Session內(nèi)置對(duì)象就會(huì)注銷。在Session生命周期內(nèi),可以使用Session內(nèi)置對(duì)象對(duì)不同的用戶進(jìn)行頁(yè)面編程,這樣就能夠?qū)崿F(xiàn)不同的用戶顯示不同的內(nèi)容。例如當(dāng)用戶登錄后,會(huì)跳轉(zhuǎn)到一個(gè)個(gè)人界面,這個(gè)界面可能是通用界面,但是需要不同的用戶在當(dāng)前界面操作。創(chuàng)建一個(gè)個(gè)人界面,當(dāng)

38、不同的用戶訪問(wèn)該界面時(shí)顯示的效果也不同,該頁(yè)面為logined.aspx,示例代碼見光盤中源代碼第23章23-123-1Logined.aspx所示。其中,代碼在頁(yè)面中添加了一個(gè)Label控件和一個(gè)Image控件,這兩個(gè)控件分別對(duì)不同的用戶呈現(xiàn)不同的效果。例如當(dāng)用戶“soundbbg”登錄后,則系統(tǒng)應(yīng)該提示說(shuō)“感謝您soundbbg的登錄”,而如果是用戶“wujunmin”登錄,則系統(tǒng)應(yīng)該提示“感謝您wujunmin的登錄”而不是原來(lái)的提示信息,同時(shí)也可以為相應(yīng)的用戶顯示不同的用戶頭像,示例代碼如下所示。 protected void Page_Load(object sender, Even

39、tArgs e) if (String.IsNullOrEmpty(Session"name".ToString()/判斷Session Response.Redirect("default.aspx");/頁(yè)面跳轉(zhuǎn) else Label1.Text = Session"name".ToString();/獲取Session if (Session"name".ToString() = "guojing")/執(zhí)行編程 Image1.ImageUrl = "mail.png"/獲取圖像 上述代碼可以使用Session對(duì)象進(jìn)行判斷和編程,如果Session對(duì)象為空,則說(shuō)明用戶并沒(méi)有登錄或者用戶為非法用戶,那么就必須跳轉(zhuǎn)到登錄頁(yè)面進(jìn)行登錄。如果用戶是合法用戶,并且用戶是一些例如VIP等用戶,就需要對(duì)特定的用戶進(jìn)行編程以呈現(xiàn)不同的樣式。在用戶登錄后,不僅可以使用Session對(duì)象進(jìn)行用戶信息和權(quán)限的判斷,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論