注册 登录
编程论坛 ASP.NET技术论坛

我不能把验证码写入图片中。。怎么办!

小瘪三的烦恼 发布于 2008-10-07 20:53, 2090 次点击
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
using System.Drawing.Imaging;
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string str = suiji(4);
        Bitmap bit = new Bitmap(50, 20);
        Graphics g = Graphics.FromImage(bit);
        Font text = new Font("宋体",20);
        Rectangle rec = new Rectangle(0,0,50,20);
        g.FillRectangle(new SolidBrush(Color.Green), rec);      
        g.DrawString(str, text, new SolidBrush(Color.Blue),rec);
        bit.Save("yanzhen.jpg",ImageFormat.Jpeg);
        Image1.ImageUrl = "yanzhen.jpg";
    }
    public string suiji(int a)
    {
        string result = "";
        string str = "0,1,2,3,4,5,6,7,8,9";
        string[] arry = str.Split(',');
        Random ram = new Random();
        
        for (int i = 0; i < a; i++)
        {
            int k = ram.Next(10);
            result = result + arry[k];
        }
        return result;
    }
}

不能显示!
9 回复
#2
球球2008-10-07 22:44
调用的路径对不对哦?
#3
小瘪三的烦恼2008-10-08 08:47
呵呵 成功了!
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
using System.Drawing.Imaging;
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string str = suiji(4);
        Bitmap bit = new Bitmap(50, 20);
        Graphics g = Graphics.FromImage(bit);
        Font text = new Font("宋体", 12);
        Rectangle rec = new Rectangle(0, 0, 50, 20);
        g.FillRectangle(new SolidBrush(Color.Green), rec);
        g.DrawString(str, text, new SolidBrush(Color.Blue), rec);
        bit.Save(Server.MapPath("yanzhen.jpg") , ImageFormat.Jpeg);
        Image1.ImageUrl = "yanzhen.jpg";
    }
    public string suiji(int a)
    {
        string result = "";
        string str = "0,1,2,3,4,5,6,7,8,9";
        string[] arry = str.Split(',');
        Random ram = new Random();

        for (int i = 0; i < a; i++)
        {
            int k = ram.Next(10);
            result = result + arry[k];
        }
        return result;
    }
}
#4
drychq2008-10-09 00:30
我 也 在弄这个。。。
  请问
bit.Save(Server.MapPath("yanzhen.jpg") , ImageFormat.Jpeg);
这句 保存路径吗????
  还有ImageFormat.Jpeg 是 什么 啊。。。
不懂
 麻烦解释一下。。
#5
徐强2008-10-09 10:33
汗 你这样写验证码行么?
怎么感觉不太好?。。图片都在服务端放着     假如说同一秒钟内100个用户访问网站  不知道会有什么后果。。。。
#6
铲铲2008-10-09 12:50
随机产生4个字符以后,用于生成缩略图,同时服务器也要小心保存这四个字符,用以对用户输入做出判断。不知你保存到哪里。

这样存在一个严重的问题,当多个用户访问时,验证码不是互相隔离的。举个例子:
A用户到达登陆页面,网站为其生成缩略图A和相关信息,A用户正在输入用户名密码

B用户到达登陆页面,网站为其生成了缩略图B和相关信息。

A这时按照缩略图A填写并提交,但网站只能用缩略图B的相关信息来验证用户A的输入,当然用户A就不能验证通过。

因此如果要用文件系统来产生验证码的话,必须要考虑每个用户之间的隔离。
#7
smoon2008-10-09 21:20
楼上的说的好~~~至少应该按时间或是用户名来见目录或文件名是吗?
#8
铲铲2008-10-09 22:13
实际上,你可以参看一下置顶贴里的验证码控件,提供了较好的解决办法,那就是采用流,而不借助文件系统。
你要想,不仅可以输出HTML文件,其实整个输出都是可以被控制和改写的,具体就是清空Response内容,换入适当图片,改写ContentType,在客户端得到的就是一张图片。这个图片是实时生成的,并不需要文件系统支持。
#9
小瘪三的烦恼2008-10-10 09:24
恩。。。谢谢指教。。。我看看去。。我是新手。。
#10
妖狐2008-10-16 23:30
回帖是一种美德
1