




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、共享一款ASP.NET驗證碼控件(附詳細用法)最近在完善我的畢業設計一ASP.NET(C#)實現的三層構架的二手交易系統,覺得有必要加上驗證碼,這樣網站的安全性會提升一些。于是利用百度、谷歌反復搜索,終于找到了一款比較牛叉的驗證碼控件。原作者不詳,這里附上一個地址。程序我做了一些小小的修改。按原文所說的操作,根本編譯不了。原文的用法可以查看上面的鏈接地址,這里我貼出我自己的用法。我將兩個類整合到一個.CS文件中了(這里命名為AuthCode.cs),程序如下:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentMod
2、el;usingSystem.Text;usingSystem.Web;usingSystem.Web.UI.WebControls;usingSystem.Web.UI;usingSystem.Web.SessionState;usingSystem.Drawing;usingSystem.IO;namespaceAuthCodeToolboxData()publicclassAuthCode:WebControl/summary/獲得驗證碼的值/summary/returns驗證碼/returnspublicstringGetValue()returnHttpContext.Current
3、.Sessionvalue.ToString();05indab-e(irue=oaiegory(=Appearance=)一uescripiion(=s於蚩木岡=)一uefau_$wriQrTag.-ITIg)1mBs:(督圧靳戾HTMLiE)二proieciedoverridevoidAddmbuQSTORender(Him-Texiwmerwriier)base.AddmbuQSTORender(wriQr)s哄斕郵圧ssHTMr跡戾訕首壽耳琢莒陛議和戾Him_TexiwriQrn_uwriQr.Addsiy-embuQ(Him_Te$wriQrsiy-eoursoh=poinQ3suH
4、wmer.AddmbuQ(o=nc=c5=ihis.srcH_.mg.jd7idL+Maih.randoln()=)Mujsverify-mg.jdwriQr.AddmbuQ(Him_Te$wriQrmbuQ.srp=3g.jd=wriQrddmbuQ(=a_r=inra型費=publicclassAuthCodeHttpHander:IHttpHandler,IRequiresSessionState/返回驗證碼字符/vparamname=codeCount驗證碼長度/privatestringGetRandomNumberString(intcodeCount)stringstrChoic
5、e=2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,U,V,W,X,Y,Z;stringstrResult=strChoice.Split(newChar,);stringstrReturn=;Randomrnd=newRandom();for(inti=0;ivcodeCount;i+)intj=rnd.Next(strResult.Length);/隨機數不能大于數組的長度strReturn=strReturn+strResultj.ToString();returnstrReturn;privateColorGetColor()re
6、turnColor.Black;privateBitmapCreateImage(stringstr_AuthCode)intwidth=str_AuthCode.Length*13;intheight=20;Randomrad=newRandom();Bitmapbmp=newBitmap(width,height);Graphicsgrp=Graphics.FromImage(bmp);/在圖片上繪制圖形grp.Clear(Color.White);/填充bmp的背景色grp.DrawRectangle(newPen(Color.Red,1),0,0,width-1,height-1);/
7、繪制邊框intnum=width*height;for(inti=0;inum;i+=3)在圖片的指定坐標上畫上有顏色的圓點intx=rad.Next(width);inty=rad.Next(height);intr=rad.Next(255);intg=rad.Next(255);intb=rad.Next(255);Colorc=Color.FromArgb(r,g,b);bmp.SetPixel(x,y,c);在圖片的指定坐標上畫上有顏色的圓點Fontf=newFont(宋體,12,FontStyle.Bold);/定義字體Brushbr=newSolidBrush(Color.Bla
8、ck);/定義畫筆的顏色及字體的顏色for(inti=0;istr_AuthCode.Length;i+)strings=str_AuthCode.Substring(i,1);/單個單個的將字畫到圖片上Pointp=newPoint(i*12+rad.Next(3),rad.Next(3)+1);/字體出現的位置(坐標)grp.DrawString(s,f,br,p);繪制字符串grp.Dispose();returnbmp;/返回/是否可以處理遠程的HTTP請求/publicboolIsReusablegetreturntrue;/將驗證碼圖片發送給WEB瀏覽器/publicvoidPro
9、cessRequest(HttpContextcontext)intsize=AuthCode.mySize;/Int32.Parse(String)context.SessionSize);MemoryStreamms=newMemoryStream();/創建內存流(初始長度為0自動擴充)stringNumStr=GetRandomNumberString(size);/獲得驗證碼字符context.Session.Add(value,NumStr);/將驗證碼字符保存到session里面BitmaptheBitmap=CreateImage(NumStr);/獲得驗證碼圖片theBitm
10、ap.Save(ms,System.Drawing.lmaging.lmageFormat.Jpeg);/將位圖寫入內存流context.Response.ClearContent();/清除緩沖區里的所有內容輸出context.Response.ContentType=image/jpeg;/需要輸出圖象信息要修改HTTP頭context.Response.BinaryWrite(ms.ToArray();/將內存流寫入HTTP輸出流theBitmap.Dispose();/釋放資源ms.Close();釋放資源ms.Dispose();釋放資源context.Response.End();
11、我是這樣使用這個驗證碼控件的1:修改web.config文件在vsystem.webv/system.web間加入下面的代碼:2:“開始”-“運行”-“cmd”,用下面的兩條命令編譯AuthCode.cs文件為.DLL文件。(AuthCode.cs文件保存在“C:WINDOWSMicrosoft.NETFrameworkv2.0.50727”目錄下):cdC:WINDOWSMicrosoft.NETFrameworkv2.0.50727csc/target:libraryAuthCode.cs將得到的DLL文件添加到項目的引用中,在“工具箱”中右鍵點“選擇項”-在.net組件中勾選“AuthC
12、ode”(如下圖),點確定之后工具箱中就會增加一個AuthCode控件。將這個控件從工具箱中拖到頁面里使用。選中拖出的控件,在其屬性中設置MySize即驗證碼的長度為某一正整數。例如設置成4,自動生成的代碼如下(還有自動生成的注冊這個控件的代碼,這里未列出):到此,準備工作“基本”完成。(說“基本完成”是因為IIS里漏了一個必要的設置_人)在.NET2005中通過“文件”-“打開”-“網站”-“本地IIS”打開ASP.NET(C#)的網站項目,能正常運行頁面,驗證碼控件生成的圖片顯示不了(只顯示一個紅叉)。改用“文件系統”的形式打開則可以正常顯示。這個問題我思考了好幾天,還到一些技術論壇請教過
13、別人,沒人幫我解決(依靠別人是不行的)。這里只貼出那個最早的帖子的地址,在編程論壇、編程愛好者上的帖子就不貼出來了。我每天都試著去解決一下這個問題,終于慢慢找到了問題的癥結。因為是在用IIS調試時出問題的,所以我猜測問題很有可能就出在IIS的某個設置上。今天偶然發現IIS里有修改HTTP頭的設置,而且上面的程序注釋中提到了要修改HTTP頭,語句如下:context.Response.ContentType=image/jpeg;/需要輸出圖象信息要修改HTTP頭同時,web.config文件中也有對HTTP頭”的設置,設置如下:于是,我到MSDN里找到了一些與vhttphandlers相關的資
14、料,資料如下:設置由應用程序子目錄繼承。指令按由上而下的順序進行處理。如果兩個或多個元素指定相同的謂詞/路徑組合,則最后一個會重寫其他所有元素。MicrosoftInternet信息服務(IIS)有自己的ISAPI映射擴展模型。為使給定應用程序擴展與其處理程序之間的映射生效,該擴展必須在IIS中映射為ASP.NETISAPI。對于自定義擴展等非標準擴展,則必須相應地配置IIS。受上面資料的啟發,我又仔細翻查了IIS的設置,發現有個“映射”的設置。加上考慮到這個控件實際生成的是一個.jd的文件(沒見過的擴展名),所以我懷疑用IIS調試顯示不了這個驗證碼圖片的癥結就在這里。我以“vhttpHand
15、lersIIS”為關鍵字百度了一下,經驗證,終于找到了準確有效的設置辦法:通過“程序”一“管理工具”一“Internet信息服務”一選中“默認網站”一右鍵點“屬性”“主目錄”“配置”“映射”“添加”來設置:路徑為:C:WINDOWSMicrosoft.NETFrameworkv擴展名為:.jd限制為:GET,HEAD,POST,DEBUG去掉“檢查文件是否存在”前的勾。(必須去掉這里的“丁”)如下圖:補充:一般來說,我們只要在IIS控制臺中打開目標網站的屬性設置窗口,單擊其中的“主目錄”標簽,在該標簽設置頁面的“應用程序設置”處單擊“配置”按鈕,在其后界面中單擊“添加”按鈕,之后就能根據界面提示完成應用程序擴展名映射添加操作了。然而,有的朋友在打開應用程序擴展名添加對話框后,發現其中的“確定”按鈕處于灰色不可用狀態;并且,朋友通過“瀏覽”按鈕導入了應用程序詳細路徑,以及設置了對應程序的擴展名后,發現應用程序擴展名添加對話框中的“確定”按鈕依然處于灰色不可選狀態。要想解決這種故障現象,我們
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030中國住宅太陽能儲存行業市場發展趨勢與前景展望戰略研究報告
- 2025-2030中國二維晶體行業市場發展趨勢與前景展望戰略研究報告
- 2025-2030中國臨床參考實驗室服務行業市場發展趨勢與前景展望戰略研究報告
- 2025-2030中國MO(有機金屬)來源行業市場發展趨勢與前景展望戰略研究報告
- 2025-2030中國DD霜行業市場發展趨勢與前景展望戰略研究報告
- 企業食堂菜單設計協議
- 股權轉讓居間服務協議
- 2025至2030年采煤機錐齒輪付項目投資價值分析報告
- 2025-2030腎素抑制劑行業市場現狀供需分析及重點企業投資評估規劃分析研究報告
- 產品研發委托協議及合同條款
- 高三數學復習備考策略
- 六、七年級走進文言文譯文
- 幼兒園中班美術《瘋狂的頭發》課件
- 半月板損傷的護理查房
- 滬教版初中數學初二數學上冊《二次根式的運算》教學設計
- 糧庫出租合同書本
- 皮膚科治療知情同意書
- 2022年桂林臨桂區教師招聘考試真題
- 【基于STM32智能門鎖系統的設計10000字(論文)】
- 液壓支架外文翻譯
- 我的家鄉煙臺課件
評論
0/150
提交評論