ASP.NET ashx 페이지 새로 고침 없 이 인증 코드 생 성

현재 대부분의 사이트 가 로그 인 할 때 인증 코드 를 입력 하 라 고 요구 하고 인터넷 에서 도 범례 를 보 았 으 니 이 제 는 새로 고침 되 지 않 은 페이지 에서 인증 코드 를 만 드 는 방법 을 정리 해 보 자.
효과 그림:
 
구현 방식:
프론트 데스크:

<div>
 <span>Identifying Code:</span>
 <asp:TextBox ID="txtValidationCode" runat="server" Width="130px" MaxLength="4"></asp:TextBox>
 <img id="imgYZ" class="code" style=" height:23px; width:65px;" 
 src="Img.ashx" onclick="this.src=this.src+'?'"/ />
 <img src="../images/btn_change.gif" title="Change" class="btn_change" Style="cursor: hand"
 onclick="ImgChange()" />
</div>
JS:

<script language="javascript" type="text/javascript">
 function ImgChange() 
 { 
 var img=document.getElementById("imgYZ");
 img.click();
 } 
</script>
ashx:

using System;
using System.Web;
using CLAIMS.BLL;
using System.Data;
using System.Configuration;
using System.Web.SessionState;
using System.Drawing;

public class Img : IHttpHandler, IRequiresSessionState
{
 
 public void ProcessRequest (HttpContext context) 
 {
 context.Response.ContentType = "image/Jpeg";
 
 string s_random = "";
 System.IO.MemoryStream ms = new System.IO.MemoryStream();
 s_random = RndNum(4);
 context.Session["random"] = s_random;
 s_random = s_random.Substring(0, 1) + " " + s_random.Substring(1, 1) + " " + s_random.Substring(2, 1) + " " + s_random.Substring(3, 1);
 
 CreateImage(s_random, ref ms);
 context.Response.ClearContent();
 context.Response.BinaryWrite(ms.ToArray());

 context.Response.Flush();
 context.Response.End();
 }

 private void CreateImage(string checkCode,ref System.IO.MemoryStream ms)
 {
 int iwidth = (int)(checkCode.Length * 18);
 System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 45);
 Graphics g = Graphics.FromImage(image);
 g.Clear(Color.White);
 //    
 Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
 //      
 //string[] font = {"Verdana","Microsoft Sans Serif","Comic Sans MS","Arial","  "};
 Random rand = new Random();
 //      
 for (int i = 0; i < 50; i++)
 {
  int x = rand.Next(image.Width);
  int y = rand.Next(image.Height);
  g.DrawRectangle(new Pen(Color.LightGray, 0), x, y, 1, 1);
 }

 //               

 for (int i = 0; i < checkCode.Length; i++)
 {
  int cindex = rand.Next(7);
  int findex = rand.Next(5);
  Font font = new System.Drawing.Font("Arial", 24, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));
  Brush b = new System.Drawing.SolidBrush(c[cindex]);
  int ii = 4;
  if ((i + 1) % 2 == 0)
  {
  ii = 2;
  }
  g.DrawString(checkCode.Substring(i, 1), font, b, 3 + (i * 12), ii);
 }
 //     

 g.DrawRectangle(new Pen(Color.Black, 0), 0, 0, image.Width - 1, image.Height - 1);

 //      
 image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
 
 g.Dispose();
 image.Dispose();
 }

 public static String RndNum(int VcodeNum)
 {
 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,O,P,Q,R,S,T,U,W,X,Y,Z";
 String[] VcArray = Vchar.Split(',');
 String VNum = "";
 Random random = new Random();
 for (int i = 1; i <= VcodeNum; i++)
 {
  int iNum = 0;
  while ((iNum = Convert.ToInt32(VcArray.Length * random.NextDouble())) == VcArray.Length)
  {
  iNum = Convert.ToInt32(VcArray.Length * random.NextDouble());
  }
  VNum += VcArray[iNum];
 }
 return VNum;
 }
 
 public bool IsReusable {
 get {
  return false;
 }
 }

}
비고:
onclick="this.src=this.src+'?'"
왜 하나 더 넣 어야 되 는 지 모 르 겠 어 요.번,그래서 인터넷 에 검색 해서 선배 님 들 의 견 해 를 참고 하 세 요.
[이것 은 현재 그림 링크 를 나타 내 는 것 으로 현재 링크 값 을 바탕 으로 물음표 가 추가 되 었 습 니 다.
예 를 들 어 현재 src="check.aspx"를 클릭 하면"check.aspx?"가 됩 니 다.계속 누 르 면'check.aspx???'
이 물음 표 는 실제 적 인 의미 가 없다.유일한 역할 은 IE 에 이미지 링크 에 변화 가 생 겼 고 그림 을 새로 고 쳐 야 한 다 는 것 이다.]
[GET:클 라 이언 트 가 서버 에서 문 서 를 읽 으 려 면 GET 방법 을 사용 합 니 다.GET 방법 은 서버 에 URL 포 지 셔 닝 자원 을 메시지 에 응답 하 는 데이터 부분 에 두 고 클 라 이언 트 에 게 돌려 달라 고 요구 합 니 다.GET 방법 을 사용 할 때 요청 인자 와 대응 하 는 값 을 URL 뒤에 추가 하고 물음표("?")를 사용 합 니 다.URL 의 끝 과 요청 매개 변수의 시작 을 나타 내 며 전달 매개 변수의 길이 가 제한 되 어 있 습 니 다.예 를 들 어,/index.jsp?id=100&op=bind.
POST:클 라 이언 트 가 서버 에 정 보 를 많이 제공 할 때 POST 방법 을 사용 할 수 있 습 니 다.POST 방법 은 요청 파 라미 터 를 HTTP 요청 데이터 에 봉 하여 이름/값 으로 나타 나 대량의 데 이 터 를 전송 할 수 있 습 니 다.
this.src=this.src+'?'this.src 의 원 가 를 더 하 는 것 입 니까?서버 에 새로운 GET 방법 을 보 내 새로운 인증 코드 를 가 져 올 수 있 습 니 다.]
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기