ASP.NET 实现登录界面(生成验证码)

这周末也没干啥,真正开始ASP,做了个学籍管理系统的登录界面,登录界面主要包括用户名、密码、验证码,界面字体用了<font size="5" color="blue" font-family:"华文琥珀";></font>改变字体,生成验证码控件 ImageButton  (例如:<asp:ImageButton ID="ImageButton1" runat="server" />)
 还学会了图片按钮 HyperLink (例如: <asp:HyperLink  ID="HyperLink1" runat="server" Text="link to Default" NavigateUrl="~/Default.aspx" ImageUrl="~/Image/1.gif"></asp:HyperLink>)
其中我觉得很难的就是验证码的生成,你首先在站点中添加pivture.aspx 的窗体,打开代码页面(即pivture.aspx.cs)并录入下面代码(完整的)
ContractedBlock.gifExpandedBlockStart.gifCode

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Drawing;
using System.IO;

public partial class Picture : System.Web.UI.Page
{
    Random ran = new Random();
    protected void Page_Load(object sender, EventArgs e)
    {
        string str = getRandomValidate(4);
        Session["CheckCode"] = str;//这一部是Wie了验证码写入Session,进行验证,也可以使用cookie
        getImageValidate(str);  
    }
    //得到随机字符串,长度自定义
    private string getRandomValidate(int len)
    {
        int num;
        int tem;
        string rtuStr="";
        for (int i = 0; i < len;i++ )
        {
            num = ran.Next();
            tem = num % 10 + '0';//生成数字
            //tem = num % 26 + 'A';//生成字符
            rtuStr += Convert.ToChar(tem).ToString();

        }
        return rtuStr;
    }
    //生成图像
    private void getImageValidate(string strValue)
    {
        //string str=oo00;前两个为字母o,后两个数为0
        int width = Convert.ToInt32(strValue.Length*12);
        Bitmap img = new Bitmap(width,23);
        Graphics gfc = Graphics.FromImage(img);
        gfc.Clear(Color.White);
        drawLine(gfc,img);
        //写验证码,要定义Font
        Font font = new Font("arial",12,FontStyle.Bold);
        //Font font = new Font("宋体",12,FontStyle.Bold|FontStyle.Italic);
        System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0,0,img.Width,img.Height),Color.DarkOrchid,Color.Blue,1.5f,true);
        gfc.DrawString(strValue,font, brush ,3,2);
        drawPoint(img);
        gfc.DrawRectangle(new Pen(Color.DarkBlue),0,0,img.Width-1,img.Height-1);
        //将图像添加到页面
        MemoryStream ms = new MemoryStream();
        img.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
        //更改HTTP
        Response.ClearContent();
        Response.ContentType = "image/gif";
        Response.BinaryWrite(ms.ToArray());
        //Dispose
        gfc.Dispose();
        img.Dispose();
        Response.End();


    }

    private void drawLine(Graphics gfc,Bitmap img)
    {
        //选择画10条线,也可以增加,也可以不要线,只要随机杂点就行
        for (int i = 0; i < 10;i++ )
        {
            int x1 = ran.Next(img.Width);
            int y1 = ran.Next(img.Height);
            int x2 = ran.Next(img.Width);
            int y2 = ran.Next(img.Height);
            gfc.DrawLine(new Pen(Color.Silver),x1,y1,x2,y2);//注意画笔要淡,不然看不清
        }
 
    }

    //private void drawPoint(Bitmap img)
    //{
   
    //}

    private void drawPoint(Bitmap img)
    {
        int col = ran.Next();//在一次的图片中杂点颜色相同
        for (int i = 0; i < 100; i++)
        {
            int x = ran.Next(img.Width);
            int y = ran.Next(img.Height);
            img.SetPixel(x,y,Color.FromArgb(col));
        }
    }
  
}

录完后,需要在 登录界面显示验证码,则需要在
登录界面的代码文件 Page_Load 中加入  ImageButton1.ImageUrl = "~/Picture.aspx";
其登陆页面的代码Default.aspx.cs中的代码为
ContractedBlock.gifExpandedBlockStart.gifCode
using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class _Default : System.Web.UI.Page 
{
    
protected void Page_Load(object sender, EventArgs e)
    {
        ImageButton1.ImageUrl 
= "~/Picture.aspx";
        
if (Session["CheckCode"== null)
            Information.Text 
= "对不起,验证码生成错误!";
    }

    
protected void OK_Click(object sender, EventArgs e)
    {
        
if (UserName.Text.Length == 0)
            Information.Text 
= "请输入用户名!";
        
else
        {
            
if(Password.Text.Length ==0)
                Information.Text 
= "请输入密码!";
            
else if (CheckCode.Text.ToString() != Session["CheckCode"].ToString())
            {
                Information.Text 
= "对不起,验证码不正确,请重新输入!";
            }
            
else if (UserName.Text == "Admin" && Password.Text == "Admin" && CheckCode.Text.ToString() == Session["CheckCode"].ToString())
            {
                Information.Text 
= "用户:" + UserName.Text + "登录成功!";
                Response.Redirect(
"~/Default2.aspx");
            }
            
else
                Information.Text 
= "用户不存在或密码不正确!";
        }
    }

    
protected void Cancel_Click(object sender, EventArgs e)
    {
        Information.Text 
= "已退出登录!" ;
    }

}

转载于:https://www.cnblogs.com/yoyiorlee/archive/2009/09/20/1570631.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463290.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多域资源整合之基础准备--DNS配置

由于公司的战略调整,需要整合集团内的资源,当然也也包含IT资源,我们需要评估多家公司的IT架构统一,顺利的合并到总集团的IT架构里,这也就产生一个多域的整合的一个案例,在此分享给大家,希望对大家有所帮助&#xff01;篇幅较长&#xff0c;让我们慢慢细化&#xff01; 在这次的…

博客园“图灵杯”第3届博问大赛比赛结果

经过近一个月的激烈角逐&#xff0c;博客园“图灵杯”第三届博问大赛已圆满结束。获奖园友分别是&#xff1a; 一等奖&#xff1a;邀月&#xff08;奖励图灵图书4本&#xff09; 二等奖&#xff1a;Kinglee、邢少&#xff08;奖励图灵图书2本&#xff09; 三等奖&#xff1a;Gr…

我的LINUX学习之路之二十一之web服务器简单搭建

今天说说如何搭建HTTP服务器&#xff01; 目的&#xff1a; 使用“多IP地址”方法实现多个网站。 使用“主机头名”方法实现多个网站。 使用“多端口”方法实现多个网站。 这回用图形界面来&#xff0c;不用说&#xff0c;先来看安装软件&#xff01; System-Administation-添加…

找出一个数组中唯一一个出现2次的数字

找出一个数组中唯一一个出现2次的数字&#xff0c;不清楚是不是LeetCode上的题。本人默认是LeetCode上的题。 一个数组中有N个数字&#xff0c;但是只有一个数字出现了2次&#xff0c;其他的数字均不相同。这种问题一般应该采用hash方法实现。 让所有的数字都放到一个unorder…

动手写了一个12306插件 chrome浏览器

2019独角兽企业重金招聘Python工程师标准>>> 小生是今年毕业来上海参加工作的一位很普通的java web程序员&#xff0c;后经人介绍转到SAP方向。 以前大学离家相对比较近&#xff0c;都是坐汽车回家的&#xff0c;平常都不是高峰期坐火车&#xff0c;使用12306倒是非…

行列存储方式比较

原文链接&#xff1a;https://blog.csdn.net/vagabond6/article/details/79555282 写入&#xff1a; 行存储的写入是一次完成&#xff0c;数据的完整性因此可以确定。 列存储需要把一行记录拆分成单列保存&#xff0c;写入次数明显比行存储多。 行存储在写入上占有很大的优势 …

python环境问题(pycharm)

一、问题 我们在使用python的时候会遇到环境配置问题。如何可以一劳永逸&#xff0c;是我们解决问题的基本思想。 二、解决1.新建环境&#xff1a; 2.添加环境&#xff1a;选择需要的环境&#xff0c;可以是conda&#xff0c;亦可以是virtual。在将make available to all proje…

自己动手焊制硬件开发板

一直有一个做机器人的梦&#xff0c;所以从去年起放弃了十多年的软件开发&#xff0c;开始进入嵌入式领域&#xff0c;先后在.Net Micro Framework 项目中完成了Ti DM335上的GPIO、I2C、USB等驱动&#xff0c;方浅浅地了解了什么叫嵌入式开发。 对非软件也非硬件出身的我&#…

nmcli 命令的基本使用

nmcli 命令的基本使用 nmcli命令 地址配置工具&#xff1a;nmcli nmcli device 查看所有网卡的信息 nmcli device status 和numcli device 相同 nmcli device show 网卡名 查看某个网卡的信息 nmcli connecttion 显示所有网卡的配置连接配置&#xff0c;就是/etc/sys…

超棒的视差滚动效果javascript类库 - Jarallax

为什么80%的码农都做不了架构师&#xff1f;>>> 日期&#xff1a;2012-9-27 来源&#xff1a;GBin1.com 如果你没有听说过视差滚动的话&#xff0c;说明你真out了&#xff0c;作为2011年最流行的网站设计效果之一&#xff0c;给我们留下了深刻的印象&#xff0c;在…

关于更改当前公司(一)--ChangeCompany

AX支持多公司帐套&#xff0c;如果一个集团公司有多个分公司&#xff0c;可以通过创建多个公司帐套的方式来实现&#xff0c;在写代码的时候会遇到需要切换公司的时候&#xff0c;AX2009提供了两种方式来实现多公司数据的查询&#xff0c;内置方法ChangeCompany和关键字CrossCo…

西电网络攻防大赛--渗透测试第二题

地址&#xff1a;http://test.xdsec.org/1/ 使用google浏览器打开 点击Resources 找到cookie 发现key 不过也是加密的 猜测是base64加密 so&#xff0c;百度一个解密网站 就直接百度应用了 结果&#xff1a;g0NexTdo0r

非多态的继承情况下,基类指针可以指向派生类对象么?

class Base { // 基类 public:Base(int aa88) : a(aa) {}void f() { // 非virtualcout<<"Base"<<endl;}int a; }; class Derived : public Base { // 派生类 public:Derived(int ba 77, int bb 66) : a(ba), b(bb) {}void f() { // 非多态cout<<…

母函数题目

hdu 1028 Ignatius and the Princess III 母函数模板题 http://acm.hdu.edu.cn/showproblem.php?pid1028 题意&#xff1a; 整数的拆分。 母函数学习http://www.wutianqi.com/?p596 View Code #include <iostream> #include <cstdio> #include <cstring> …

多态情况下,怎么用基类指针去访问基类的虚函数?

class Base { // 基类 public:virtual void f() {cout<<"Base"<<endl;} }; class Derived : public Base { // 派生类 public:virtual void f() { // 最好加上该virtual cout<<"Derived"<<endl;} };int main(){Base* p new De…

[Linux] 命令行工具

1. 基本工具1.1 特殊字符shell的特殊字符有&#xff1a;&、;、|、*、?、、"、、[、]、(、)、$、<、>、{、}、^、#、/、\、%、!、~、。要将这些具有特殊含义的字符当作普通字符使用&#xff0c;可对它们转义使用&#xff0c;在特殊字符前加反斜杠" \ "…

谈谈JAVA中的安全发布

谈谈JAVA中的安全发布 昨天看到一篇文章阐述技术类资料的"等级"&#xff0c;看完之后很有共鸣。再加上最近在工作中越发觉得线程安全性的重要性和难以捉摸&#xff0c;又掏出了《Java并发编程实战》研读一番&#xff0c;这本书应该是属于为“JAVA 多线程作注解”的一…

软件工程 - 设计模式学习之工厂方法模式Factory Method

在现实生活中我们可以看见,乐事在卖薯片,可比克也在卖.我敢肯定的说它们各自都有自己的工厂来生产薯片,而且生产出来的薯片味道还是不一样的.这就是我们这里所谓的工厂方法模式. 我们来看看这个模式的UML图: 这个模式中我们可以看到:产品和工厂2个基类,然后它们下面又有些子孙类…

树莓派3B+学习笔记:4、查看GPIO

GPIO&#xff08;General Purpose I/O Ports&#xff09;意思为通用输入/输出端口。可以在终端重直接查看GPIO的定义。查看方式1&#xff1a;gpio readall 查看方式2&#xff1a; pinout 可以看出&#xff0c;这条命令执行后提示要查看更多信息访问pinout.xyz 转载于:https://w…

Silverlight的自定义tooltip提示工具条

这种应用场景其实很多&#xff0c;比如游戏中装备/魔法的选择菜单&#xff0c;这里借用了"深蓝色右手"的一张图 再比如聊天室中的文本颜色设置 虽然sl的ToolTipService.ToolTip属性可以设置任何对象&#xff0c;比如下面这样 代码 1 <Rectangle Fill"Red&qu…