随机产生验证码

     今天小咸儿来分享一下自己的代码库:随机产生验证码

    一般处理程序:

<%@ WebHandler Language="C#" Class="WaterMark" %>
/* 
 * 创建人:陈新月
 * 创建时间:2018-1-1 11:03
 * 版权所有:陈新月 & 大米时代
 */
using System;
using System.Web;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Web.SessionState;

public class WaterMark : IHttpHandler, IRequiresSessionState  //要使用session必须实现该接口,记得要导入system.web.sessionstate命名空间
{

    public void ProcessRequest(HttpContext context)
    {
        string checkCode = GenCode(5);       //随机产生5位随机字符
        context.Session["Code"] = checkCode;      //将字符串保存到Session中,以便需要时进行验证
        System.Drawing.Bitmap image = new System.Drawing.Bitmap(70, 22);
        Graphics g = Graphics.FromImage(image);
        try
        {
            //生成随机生成器
            Random random = new Random();

            //清空图片背景色
            g.Clear(Color.White);

            //画图片的背景噪音线
            int i;
            for ( i = 0; i < 25; i++)
            {
                int x1 = random.Next(image.Width);
                int x2 = random.Next(image.Width);
                int y1 = random.Next(image.Height);
                int y2 = random.Next(image.Height);
                g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
            }

            Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold));
            System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2F, true);
            g.DrawString(checkCode, font, brush, 2, 2);

            //画图片的前景噪音点
            g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
            context.Response.ClearContent();
            context.Response.ContentType = "image/Gif";
            context.Response.BinaryWrite(ms.ToArray());
        }
        finally
        {
            g.Dispose();
            image.Dispose(); 
        }
    }


    private string GenCode(int num)
    {
        string str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        char[] chastr = str.ToCharArray();
        string code = "";
        Random rd = new Random();
        int i;
        for ( i = 0; i < num; i++)
        {
            code += str.Substring(rd.Next(0, str.Length), 1);
        }
        return code;
    }

    public bool IsReusable
    {
        get 
        {
            return false;
        } 
    }
}

     不断地学习,不断地分享!

PHP 用户登录页面通常会包含以下几个步骤: 1. **HTML表单**:创建一个简单的HTML表单,包括输入字段(用户名、密码),以及用于提交表单的按钮。还可能需要一个验证码输入框,用于防止机器人攻击。 ```html <form method="post" action="login.php"> <input type="text" name="username" placeholder="用户名"> <input type="password" name="password" placeholder="密码"> <input type="text" id="captcha" name="captcha" readonly> <img src="captcha.php" alt="验证码"> <!-- 验证码图片 --> <input type="submit" value="登录"> </form> ``` 2. **服务器端处理**:在`login.php`文件中,首先读取用户输入的数据,然后生成并验证验证码。如果验证码错误,则返回错误信息。 ```php <?php session_start(); if ($_SERVER["REQUEST_METHOD"] == "POST") { $username = $_POST['username']; $password = $_POST['password']; $captcha_input = $_POST['captcha']; // 从数据库获取预定义的验证码并比对 if (!check_captcha($_SESSION['captcha'], $captcha_input)) { die("验证码错误"); } // 连接数据库 $conn = new mysqli('db_host', 'db_username', 'db_password', 'database_name'); if ($conn->connect_error) { die("数据库连接失败: " . $conn->connect_error); } // SQL查询(假设用户名和密码是唯一标识) $sql = "SELECT * FROM users WHERE username='$username' AND password='".md5($password)."'"; $result = $conn->query($sql); if ($result->num_rows > 0) { // 登录成功 $_SESSION['user_logged_in'] = true; header("Location: dashboard.php"); // 跳转到主页或个人中心 } else { die("用户名或密码错误"); } } ?> ``` 3. **验证码生成**:可以使用GD库生成随机验证码图片,并将值保存在会话中供后续比较。 ```php function generate_captcha() { session_start(); $_SESSION['captcha'] = rand(1000, 9999); // 随机生成四位数验证码 $captcha_text = $_SESSION['captcha']; return create_image_with_captcha($captcha_text); } // 创建验证码图片函数省略... ``` 注意:这只是一个简化的示例,实际应用中需要更严谨的安全措施,如密码哈希、防止SQL注入等。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值