(一)验证码模块(随机数字+Session)
2018-03-24 10:08
141 查看
想做一个用户管理(登录,注册,修改密码等),这个模块中,还包含了另一些模块,比如验证码模块,电子邮件模块。所以,在做用户管理模块之前,我先做好验证码模块。验证码分好几种,首先从最简单的开始随机数字验证开始,简单来说其实就是产生随机数字,将几个随机数字拼接起来变成字符串。以下是后台代码(number.cs)
namespace number
{
public partial class numbers : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack){
Label1.Text = getnumbers(4);
}
if ( !string.IsNullOrEmpty(HiddenField1.Value))
{
Session["numbers"] = HiddenField1.Value;
Label1.Text = HiddenField1.Value;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
if(TextBox1.Text.ToString()==Session["numbers"].ToString())
{
Response.Write("成功!");
TextBox1.Text = "";
}
else
{
Response.Write("失败!");
TextBox1.Text = "";
HiddenField1.Value = "";//必须要这个,失败了之后不会采用前面的js代码,但是有可能HIddenFild里面有值,一直失败的话HiddenFild里面的值也不会变,一直错误
Label1.Text = getnumbers(4);//重新产生随机数字
}
}
public String getnumbers(int n)
{
String s="";
String vail = "0,1,2,3,4,5,6,7,8,9";
String[] num = vail.Split(',');
//String[] num={"0","1","2","3","4","5","6","7","8","9"};这样写也可以,但是看书上跟别人的代码都用了上面的方法
Random ran = new Random();
for(int i=0;i<n;i++)
{
int t = ran.Next(num.Length);//产生一个小于num.Length的数字
s += num[t];
}
Session["numbers"] = s;
return s;
}
}
}
在这部分代码中,我的随机数字并没有使用不产生重复随机数字的方法(使用random这个函数,产生的基本不是重复的,所以我没想太多),如果要产生不重复的随机数字,可以去网上查找资料,修改这部分代码。
,
number.aspx代码
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<script type="text/javascript">
function getnumbers(n) {
var s="";
var num = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
for(var i=0;i<n;i++)
{
var t = parseInt(10 * Math.random()); //Math.random()只能生成0~1的小数
s += num[t];
}
document.getElementById("Label1").innerHTML = s;//这里不能是.Text,label在客户端会变成<span>,如果不用innerHTML改变不了值
// Session["numbers"] = s;这个在js里面是没有的
document.getElementById("HiddenField1").value = s;
}
function changestyle() {
document.getElementById("lab").style.cursor = 'pointer';
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
<p>
验证码:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</p>
<div id="lab" onclick="getnumbers(4)" onmousemove="changestyle()"><asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></div>
<%--<a href="javascript:void(0)" onclick="getnumbers(4)" >看不清,换一张</a> --%>
<%-- <!-- -->, html comment会包含在最终生成的html文件中
现在使用的注释,aspx comment 不会包含在最终生成的html文件中 --%>
<asp:HiddenField ID="HiddenField1" runat="server" />
<asp:Button ID="Button1" runat="server" Text="提交" OnClick="Button1_Click" />
</form>
</body>
</html>
这里我写了两个js的事件,一个是点击事件,一个是鼠标移动事件。当鼠标移动到<div id="lab">这里时,首先鼠标会改变它的样式,变成一个手柄形状,然后点击一下,数字就会改变。效果如下(鼠标形状截屏不下来)
一开始我以为在js里面可以直接使用session,但是后来自己运行的时候出现了错误,然后调试,发现session这个值一直没有变化,才知道session这边出了问题。从js将值传给后台,我使用了一个asp.net的一个隐藏控件,在js中将值赋给它,然后在后台将它读取出来,再保存到session中, 这样,简单的随机数字验证码就实现了。
我的代码放在https://github.com/1126048156/-.git
numbers这部分就是随机数字验证码的代码。
namespace number
{
public partial class numbers : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack){
Label1.Text = getnumbers(4);
}
if ( !string.IsNullOrEmpty(HiddenField1.Value))
{
Session["numbers"] = HiddenField1.Value;
Label1.Text = HiddenField1.Value;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
if(TextBox1.Text.ToString()==Session["numbers"].ToString())
{
Response.Write("成功!");
TextBox1.Text = "";
}
else
{
Response.Write("失败!");
TextBox1.Text = "";
HiddenField1.Value = "";//必须要这个,失败了之后不会采用前面的js代码,但是有可能HIddenFild里面有值,一直失败的话HiddenFild里面的值也不会变,一直错误
Label1.Text = getnumbers(4);//重新产生随机数字
}
}
public String getnumbers(int n)
{
String s="";
String vail = "0,1,2,3,4,5,6,7,8,9";
String[] num = vail.Split(',');
//String[] num={"0","1","2","3","4","5","6","7","8","9"};这样写也可以,但是看书上跟别人的代码都用了上面的方法
Random ran = new Random();
for(int i=0;i<n;i++)
{
int t = ran.Next(num.Length);//产生一个小于num.Length的数字
s += num[t];
}
Session["numbers"] = s;
return s;
}
}
}
在这部分代码中,我的随机数字并没有使用不产生重复随机数字的方法(使用random这个函数,产生的基本不是重复的,所以我没想太多),如果要产生不重复的随机数字,可以去网上查找资料,修改这部分代码。
,
number.aspx代码
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<script type="text/javascript">
function getnumbers(n) {
var s="";
var num = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
for(var i=0;i<n;i++)
{
var t = parseInt(10 * Math.random()); //Math.random()只能生成0~1的小数
s += num[t];
}
document.getElementById("Label1").innerHTML = s;//这里不能是.Text,label在客户端会变成<span>,如果不用innerHTML改变不了值
// Session["numbers"] = s;这个在js里面是没有的
document.getElementById("HiddenField1").value = s;
}
function changestyle() {
document.getElementById("lab").style.cursor = 'pointer';
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
<p>
验证码:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</p>
<div id="lab" onclick="getnumbers(4)" onmousemove="changestyle()"><asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></div>
<%--<a href="javascript:void(0)" onclick="getnumbers(4)" >看不清,换一张</a> --%>
<%-- <!-- -->, html comment会包含在最终生成的html文件中
现在使用的注释,aspx comment 不会包含在最终生成的html文件中 --%>
<asp:HiddenField ID="HiddenField1" runat="server" />
<asp:Button ID="Button1" runat="server" Text="提交" OnClick="Button1_Click" />
</form>
</body>
</html>
这里我写了两个js的事件,一个是点击事件,一个是鼠标移动事件。当鼠标移动到<div id="lab">这里时,首先鼠标会改变它的样式,变成一个手柄形状,然后点击一下,数字就会改变。效果如下(鼠标形状截屏不下来)
一开始我以为在js里面可以直接使用session,但是后来自己运行的时候出现了错误,然后调试,发现session这个值一直没有变化,才知道session这边出了问题。从js将值传给后台,我使用了一个asp.net的一个隐藏控件,在js中将值赋给它,然后在后台将它读取出来,再保存到session中, 这样,简单的随机数字验证码就实现了。
我的代码放在https://github.com/1126048156/-.git
numbers这部分就是随机数字验证码的代码。
相关文章推荐
- PHP+jQuery 注册模块的改进(一):验证码存入SESSION
- .NET注册登录模块注意问题之验证码的生成及使用
- Python学习常用第三方模块:PIL,生成验证码
- 一个Maven实现的验证码模块
- java典型模块实例1:英文,数字,中文混合的验证码
- SSH2验证码功能模块实现
- python基础-第三方模块PIL_绘图,验证码
- 验证码通用模块 javascript版
- python使用PIL模块生成验证码
- python中random模块基础用法(利用random生成验证码)
- 【实战】用户模块,验证码程序
- Python使用PIL模块生成随机验证码
- ASP.NET MVC中验证码验证模块
- ASP.NET----验证码模块
- 关于后盾网yii框架的学习小结(5)--验证码的使用与规则的设置,为后台模块设置独立的布局
- YII模块中验证码无法加载进来
- binbinyang-----Android获取验证码后倒计时程序--注册模块
- node-ccap模块生成captcha验证码
- java功能模块--给手机发送验证码
- ASP.NET----验证码模块