如何将验证码生成的数字与表单中填写的进行验证呢?

yunanyunan 2008-01-18 02:33:52
我的数据保存前的验证代码估计问题就在这里:
<%
If Trim(Session("psn"))<>Trim(Request.Form("validatecode")) Then
rs.close
set rs=nothing
Response.Write ("<script>alert('友情提示!\n\n验证编码输入错误!');history.back();</script>")
Response.end
end if
%>

下面是我的表单中:验证码的部分:

<td align="right" bgcolor="#EFF7FE">验证码:</td>
<td><input name=validatecode style="width:64px;height:20px" maxlength=6 size="6"> <img src=Code.asp align=absmiddle style='cursor:pointer' alt='验证码看不清楚?请点击刷新验证码' onclick="this.src='Code.asp?'+Math.random()"> <font color="#FF0000">*</font><span id=Code></span></td>





...全文
220 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
beyondamane 2008-01-18
主要是先搞清楚session是否有值
response.write 出来看看

据你:
用下面的 好像不起作用乱填也可以提交过去。
所说
很可能你的session是空的
回复
yanniu008 2008-01-18
我做的一个简单的验证码就是,把获得的随机数存放到一个变量中,然后把这个变量放到一个<input type="hidden">
中传到服务器端,同时填写的验证码也传到服务器,然后比较是否相等
回复
gingerkang 2008-01-18
验证码是存在服务端的
你的js校验是客户端的,你刷新验证码的时候服务端的都变了,本地的需要整个页面刷新才变动一次.比较肯定无效;
在本地校验这个需要跟服务端交互才行,ajax可以
回复
用Session来存放,然后比较
回复
草原可可 2008-01-18
调试 看能不能获得验证码
回复
fimmuhu 2008-01-18
你尝试response.write看看你session里面的值是多少。

在下面这个段代码里面用response.write显示你每次提交之后session的值。


<%
If Trim(Request.Form("validatecode"))=Empty Or Trim(Session("psn"))<>Trim(Request.Form("psn")) Then
response.write "验证失败"

else
response.write "验证成功"
end if
%>

回复
yunanyunan 2008-01-18
关键上面生成验证码图片的代码中 ,已经有下面一句:

Session(pSN) = DigtalStr '记录入Session

数据应该已经记录到Session了

Session值与input提交的值比较的代码我试了很多都不行啊。

用下面的 好像不起作用乱填也可以提交过去。

<%
if Cstr(Session( "psn")) <> Trim(Request( "validatecode ")) or Trim(Request( "validatecode ")) = " " then
Response.Write ("<script>alert('友情提示!\n\n验证编码输入错误!');history.back();</script>")
Response.end
end if
Session( "cnbruce.com_ValidateCode ") = " " '不管正确与否,要重新生成Session
%>

----------------------------------------
用下面的一直提示输入错误:
<%
If Trim(Session("psn")) <> Trim(Request.Form("validatecode")) Then
rs.close
set rs=nothing
Response.Write (" <script> alert('友情提示!\n\n验证编码输入错误!');history.back(); </script> ")
Response.end
end if
%>
回复
fimmuhu 2008-01-18
先把验证码放入Session里面,然后把这个Session值与input提交的值比较。

思路如上。
回复
yunanyunan 2008-01-18

<%
Const nMaxSaturation = 100 ' 最大色彩饱和度
Const nBlankNoisyDotOdds = 0.1 ' 空白处噪点率
Const nColorNoisyDotOdds = 0.0 '有色处噪点率
Const nCharCount = 6 ' 产生的字符个数
Const nPixelWidth = 28 ' 单个字符位图的宽度
Const nPixelHeight = 30 ' 单个字符位图的高度
Const nColorHue = -1 ' 显示验证码的色调(-1表示随机色调, -2表示灰度色调)'220
Const nAngleRandom = 28 ' 角度随机量
Const nLengthRandom = 10 ' 长度随机量(百分比)
Const cCharSet = "0123456789"
Session.Timeout=45
'Const cCharSet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" '带验证码
' 构成验证码的字符集
' 如果扩充了下边的字母矢量库,则可以相应扩充这个字符集

略........

' 禁止缓存
Response.Expires = -9999
Response.AddHeader "pragma", "no-cache"
Response.AddHeader "cache-ctrol", "no-cache"
Response.ContentType = "image/bmp"

Call CDGen

Session(pSN) = DigtalStr '记录入Session

Dim PicWidth, PicHeight, FileSize, PicDataSize
PicWidth = nCharCount * nPixelWidth
PicHeight = nPixelHeight
PicDataSize = PicWidth * PicHeight * 3
FileSize = PicDataSize + 54

' 输出BMP文件信息头
Response.BinaryWrite ChrB(66) & ChrB(77) & _
ChrB(FileSize Mod 256) & ChrB((FileSize \ 256) Mod 256) & ChrB((FileSize \ 256 \ 256) Mod 256) & ChrB(FileSize \ 256 \ 256 \ 256) & _
ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & _
ChrB(54) & ChrB(0) & ChrB(0) & ChrB(0)

' 输出BMP位图信息头
Response.BinaryWrite ChrB(40) & ChrB(0) & ChrB(0) & ChrB(0) & _
ChrB(PicWidth Mod 256) & ChrB((PicWidth \ 256) Mod 256) & ChrB((PicWidth \ 256 \ 256) Mod 256) & ChrB(PicWidth \ 256 \ 256 \ 256) & _
ChrB(PicHeight Mod 256) & ChrB((PicHeight \ 256) Mod 256) & ChrB((PicHeight \ 256 \ 256) Mod 256) & ChrB(PicHeight \ 256 \ 256 \ 256) & _
ChrB(1) & ChrB(0) & _
ChrB(24) & ChrB(0) & _
ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & _
ChrB(PicDataSize Mod 256) & ChrB((PicDataSize \ 256) Mod 256) & ChrB((PicDataSize \ 256 \ 256) Mod 256) & ChrB(PicDataSize \ 256 \ 256 \ 256) & _
ChrB(18) & ChrB(11) & ChrB(0) & ChrB(0) & _
ChrB(18) & ChrB(11) & ChrB(0) & ChrB(0) & _
ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & _
ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0)

' 逐点输出位图阵列
If nColorHue = -1 Then
CurColorHue = Int(Rnd * 360)
ElseIf nColorHue = -2 Then
CurColorHue = 0
Else
CurColorHue = nColorHue
End If
For j = 0 To nPixelHeight - 1
For i = 0 To Len(DigtalStr) * nPixelWidth - 1
If nColorHue = -2 Then
Response.BinaryWrite HSBToRGB(CurColorHue, 0, 100 - Buf(nPixelHeight - 1 - j, i))
Else
Response.BinaryWrite HSBToRGB(CurColorHue, Buf(nPixelHeight - 1 - j, i), 100)
End If
Next
Next
End Sub
%>
回复
发帖
ASP
创建于2007-09-28

2.8w+

社区成员

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
申请成为版主
帖子事件
创建了帖子
2008-01-18 02:33
社区公告
暂无公告