我正在使用.NET验证码,其中验证码图像是从文件创建的,如下所示: myFile.aspx有这一行: < img src =“/ CImage.aspx”/>
调用文件(代码隐藏为VB)始终加载验证码生成的图像。 CImage.aspx是C#。同样,总是返回并显示图像。
CImage.aspx.cs将一个字符串变量放入session中,我的调用页面将用户从文本框输入的内容与CImage.aspx.cs放入会话的内容进行比较。通常,页面崩溃,因为会话中没有任何内容。但是,captchaImage.aspx始终会写入图像。
使用CImage.aspx调用我的页面是在VB中。
为什么“有时”会成为会话变量进行比较,但通常没有。 (除非你刷新页面)
CImage.aspx.cs:
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing.Imaging;
public partial class CImage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// Create a random code and store it in the Session object.
this.Session["CaptchaImageText"] = GenerateRandomCode();
// Create a CAPTCHA image using the text stored in the Session object.
RandomImage ci = new RandomImage(this.Session
["CaptchaImageText"].ToString(), 300, 75);
// Change the response headers to output a JPEG image.
this.Response.Clear();
this.Response.ContentType = "image/jpeg";
// Write the image to the response stream in JPEG format.
ci.Image.Save(this.Response.OutputStream, ImageFormat.Jpeg);
// Dispose of the CAPTCHA image object.
ci.Dispose();
}
// Function to generate random string with Random class.
private string GenerateRandomCode()
{
Random r = new Random();
string s = "";
for (int j = 0; j < 5;j++)
{
int i = r.Next(3);
int ch;
switch (i)
{
case 1:
ch = r.Next(0, 9);
s = s + ch.ToString();
break;
case 2:
ch = r.Next(65, 90);
s = s + Convert.ToChar(ch).ToString();
break;
case 3:
ch = r.Next(97, 122);
s = s + Convert.ToChar(ch).ToString();
break;
default:
ch = r.Next(97, 122);
s = s + Convert.ToChar(ch).ToString();
break;
}
r.NextDouble();
r.Next(100, 1999);
}
return s;
}
}