验证码一般是用javascript生成随机数的,还是后台

我做了一个验证码,在后台会把验证码保存在Session中,怎样在前台用JS验证哪个生成好的验证码_百度知道
我做了一个验证码,在后台会把验证码保存在Session中,怎样在前台用JS验证哪个生成好的验证码
我把生成好的验证码字符串放在Session,前台输入验证码,再提交给后台我可以取到Session中的值,判断也没问题,输错了显示错误,对了显示正确。
现在我想在前台用js来验证,可是在前台取Session的时候是前一个的验证码的Session,这是为什么,
有什么解决办...
我有更好的答案
用ajax啊。后台处理后返回值,给你看个例子
采纳率:65%
为您推荐:
其他类似问题
session的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。如何使用javascript制作验证码?_百度知道
如何使用javascript制作验证码?
我正在做一个登录框,需要验证码。如何生成验证码呢,还是说,我只要布局一个图片放在那里交给后台做呢?
我有更好的答案
你这太简单了吧,呵呵!使用方法: 1. 将以下代码保存为img.asp 2. 在要显示位置插入&img src=&img.asp?number=55-00&& &%
Call Com_CreatValidCode(Request.QueryString(&number&))
Public Sub Com_CreatValidCode(pTel)
'----------禁止缓存
Response.Expires = 0
Response.AddHeader &Pragma&,&no-cache&
Response.AddHeader &cache-ctrol&,&no-cache&
Response.ContentType = &Image/BMP&
Dim i, ii, iii ,rndColor,strLen,sql,rs
Const cOdds = 5 '------------杂点出现的机率
Const str=&-&
strLen = len(pTel)
rndColor = ChrB(cint(rnd*255)) & ChrB(cint(rnd*255)) & ChrB(cint(rnd*255))
'-----------颜色的数据(字符,背景)
Dim vColorData(1)
'vColorData(0) = ChrB(0) & ChrB(0) & ChrB(0)
'----蓝0,绿0,红0(黑色)
'vColorData(1) = ChrB(255) & ChrB(255) & ChrB(255) '----蓝250,绿236,红211(浅蓝色)
'vColorData(0) = ChrB(197) & ChrB(106) & ChrB(49)
'---- 蓝0,绿0,红0(黑色)
'vColorData(1) = ChrB(238) & ChrB(210) & ChrB(193) '-----蓝250,绿236,红211(浅蓝色)
vColorData(0) = ChrB(0) & ChrB(0) & ChrB(0)
'---------蓝0,绿0,红0(黑色)
vColorData(1) = ChrB(205) & ChrB(237) & ChrB(245) '------------蓝250,绿236,红211(浅蓝色)
'--------------------随机产生字符
Dim vCode()
redim vCode(strLen-1)
For i = 0 To strLen-1
vCode(i) =instr(1,str,mid(pTel,i+1,1),1)-1
'-----------字符的数据
Dim vNumberData(11)
'Verdana Font
vNumberData(0) = &&
vNumberData(1) = &&
vNumberData(2) = &&
vNumberData(3) = &&
vNumberData(4) = &&
vNumberData(5) = &&
vNumberData(6) = &&
vNumberData(7) = &&
vNumberData(8) = &&
vNumberData(9) = &&
vNumberData(10) = &&
vNumberData(11) = &&
'-----------------输出图像文件头 &br&
Response.BinaryWrite ChrB(66) & ChrB(77) &chrb(((strLen*8*10*3+54) mod 256)) & chrb(((strLen*8*10*3+54)\ 256)mod 256) & ChrB((((strLen*8*10*3+54)\ 256)\256)mod 256) & ChrB(((((strLen*8*10*3+54)\ 256)\256)\256)mod 256) & ChrB(0) & ChrB(0) &_
ChrB(0) & ChrB(0) & ChrB(54) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(40) & ChrB(0) &_
ChrB(0) & ChrB(0) & ChrB(strLen*8) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(10) & ChrB(0) &_
ChrB(0) & ChrB(0) & ChrB(1) & ChrB(0)
'------------------输出图像信息头
Response.BinaryWrite ChrB(24) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0)&_
ChrB((strLen*8*10*3)mod 256)&ChrB(((strLen*8*10*3)\256)mod 256)&ChrB((((strLen*8*10*3)\256)\256)mod 256)&ChrB(((((strLen*8*10*3)\256)\256)\256)mod 256)&_
ChrB(196) & ChrB(14) & ChrB(0) & ChrB(0) & ChrB(196) & ChrB(14)&ChrB(0) & ChrB(0) &_
ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0)
For i = 9 To 0 Step -1
'----------历经所有行
For ii = 0 To strLen-1
'-------历经所有字
For iii = 1 To 8 '--------历经所有像素
'---------逐行、逐字、逐像素地输出图像数据
If Rnd * 99 + 1 & cOdds Then '---------随机生成杂点
Response.BinaryWrite rndColor
Response.BinaryWrite vColorData(Mid(vNumberData(vCode(ii)), i * 8 + iii, 1))
%&是否可以解决您的问题?
采纳率:59%
你要做什么级别的验证码,最简单的,就是前台产生随机值,放在DIV里,然后textbox和它对比
百度javascript验证码插件
为您推荐:
其他类似问题
您可能关注的内容
javascript的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。验证码功能用PHP 还是JS实现_百度知道
验证码功能用PHP 还是JS实现
我的网页要用到验证码功能 以免恶意注册 提高点安全性
可是 (我这是PHP程序)
$a=rand(0,9);
$b=rand(0,9);
$c=rand(0,9);
$d=rand(0,9);
echo &$a$b$c$d&;
请问我这样随机数出来了 也用了echo&$a$bC$d&; 输入在页面上了
验证码功能...
我有更好的答案
1.两者都可以;2.一般我知道的php里都用php做验证的,很方便
利用GD库就可以办到
3.网上有很多源码
你可以下载下来学习一下4.php做的话 你把随机生成的数放在session里就可以了
采纳率:36%
用PHP即可实现。
一般来说用PHP生成一个SESSION,用GD库生成图片到浏览器,然后根据用户填的数来比较SESSION,用JS实现局部刷新
验证码是PHP gd函数库生成的图片到浏览器的然后,你可以用PHP session 记录PHP生成的验证码js可以实现,看不清 ,点击验证码 更换验证码的功能
先用JS实现,这样能减低客户端访问服务器,减少服务端的开支想账户和密码这样就再用PHP验证了,安全性好最好PHP+JAVASCRIPT两个配合
其他2条回答
为您推荐:
其他类似问题
您可能关注的内容
php的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。验证码有两种获取方式,一种是刷新页面获取,一种是点击更新新图片,下面分别介绍一下:
1、刷新页面获取
&& 刷新页面获取可以通过给img标签的src等于一个action路径的方式,这样每次刷新img都会去后台请求这个action,返回一个新的验证码
2、点击更新图片
&& 很多种情况下我们并不刷新页面,而只是点击更换验证码的局部刷新方式,这时我们需要在img上增加一个onclick事件,写一个function函数,在函数里获取src的值为action路径,需要注意的是,我们要在后面跟一个Math.random()方法,以帮助我们每次都是发送的一个全新的请求,避免浏览器返回缓存的内容。
代码:html页面img标签的定义,有src和onclick
&img src="validate.do" id="validateImage" onclick="changeImg();"&
代码:changeImg的函数处理
function changeImg(){
document.getElementById("validateImage").src ="validate.do?rnd="+ Math.random();
浏览: 143868 次
来自: 北京
无论如何要谢谢你,试了很多办法,你的这个才是终极解决办法 ...
芳姐,我过来溜达溜达,,,嘿嘿。。。
mikey_5 写道没办法啊,这个是全局问题,买个防毒口罩吧, ...
没办法啊,这个是全局问题,买个防毒口罩吧,朋友
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'关于form注册时的验证 JS ajax 还是后台JAVA 验证 JS+ajax的验证很多容易被绕过 - ITeye问答
如题:
关于form注册时的验证 JS ajax 还是后台JAVA 验证
JS验证只能验证合法性 email之类的唯一性验证可以走AJAX,但是大部分可以绕过的,后台的MVC我用的是struts2,但是牛逼的公司都是自己的MVC技术,这个就不谈了,struts2的验证拦截器的话验证比较方便,而且不能被用户认为的绕过,但可能用户体验差一些
我的问题是:各位是走哪种验证比较多?我看过新蛋网的注册页面,他们也是用JS+AJAX不过,人家用的https协议,我也绕不过去(用查看源代码的方式找到url直接访问),可能人家也做了拦截器之类的操作
问题补充:anliguo131 写道前台验证只是合法性的验证,并不能保证数据的一致性的要求,
如果两个用户同时用一个名字注册,这时候前台验证了,后台不验证就乱了
数据一致性无法保证
数据一致性可以走ajax,但是ajax还是可以被绕过
问题补充:redstarofsleep 写道两种验证都要
Ajax验证用于增强用户体验。
提交时再验证是保证数据的合法性。
但是我同步刷新提交的方法是把form的里面的数据搜集到一个JSON对象里面(因为要提交的东西很多,在action写很多单独的字段接收我觉得后台的代码太冗余了),然后再传到后台的,这样就不能用struts2本身的验证拦截器了(因为在我的记忆里struts2是不能对JSON的字符串进行验证的,我用的xml验证方式),如果在请求的业务前面手工做这些判断(有效性和唯一性判断)再加上验证不通过后的返回页面,那不是烦死了?
请问您项目的里的解决方案是怎么样的,提交参数如果很多的话如何验证和处理,我看过新蛋网的代码,我反正是无法绕过他的注册,直接告诉我页面不存在,并没有说字段为空之类的警告,但是人家是https的访问url,是不是走了单点之类的业务啊
这是copy的新蛋登录页面的代码:
&form method="post" id="LoginForm"&
&&&&&&&&&&& &input type="hidden" id="action" name="action" value="" /&
。。。。。。
JS:
Check : function() {
&&&&&&& ....................................
&&&&&&& if(num==0){
&&&&&&&&&&& $("#action").val("Get");
&&&&&&&&&&& $("#LoginForm").submit();
&&&&&&& }
他的提交请求的action属性都不在form标签里而在一个隐藏域里,反正我是没看到,或者他是页面加载的动态改变了?
问题补充:myali88 写道同意楼上的观点。对于影响业务的数据都必须在业务操作前再做验证!
但是我同步刷新提交的方法是把form的里面的数据搜集到一个JSON对象里面(因为要提交的东西很多,在action写很多单独的字段接收我觉得后台的代码太冗余了),然后再传到后台的,这样就不能用struts2本身的验证拦截器了(因为在我的记忆里struts2是不能对JSON的字符串进行验证的,我用的xml验证方式),如果在请求的业务前面手工做这些判断(有效性和唯一性判断)再加上验证不通过后的返回页面,那不是烦死了?
请问您项目的里的解决方案是怎么样的,提交参数如果很多的话如何验证和处理,我看过新蛋网的代码,我反正是无法绕过他的注册,直接告诉我页面不存在,并没有说字段为空之类的警告,但是人家是https的访问url,是不是走了单点之类的业务啊
这是copy的新蛋登录页面的代码:
&form method="post" id="LoginForm"&
&&&&&&&&&&& &input type="hidden" id="action" name="action" value="" /&
。。。。。。
JS:
Check : function() {
&&&&&&& ....................................
&&&&&&& if(num==0){
&&&&&&&&&&& $("#action").val("Get");
&&&&&&&&&&& $("#LoginForm").submit();
&&&&&&& }
他的提交请求的action属性都不在form标签里而在一个隐藏域里,反正我是没看到,或者他是页面加载的动态改变了?
问题补充:redstarofsleep 写道“因为要提交的东西很多,在action写很多单独的字段接收我觉得后台的代码太冗余了”
------&这个的话,可以把这些参数封装在一个类里,action里get/set的就是这一个类,类似于struts1的Form对象。
你验证数据的代码应该是共通的嘛,Ajax验证请求果类,走validate,然后调用共通代码验证,
提交数据的请求过来,走validate,然后也是调用这个共通的验证代码啊。。。现在我也打算这么做了,只不过以前struts2验证我是走xml配置验证的,没有自己写方法,因为想写的缜密还是觉得很烦,呵呵
问题补充:redstarofsleep 写道“因为要提交的东西很多,在action写很多单独的字段接收我觉得后台的代码太冗余了”
------&这个的话,可以把这些参数封装在一个类里,action里get/set的就是这一个类,类似于struts1的Form对象。
你验证数据的代码应该是共通的嘛,Ajax验证请求果类,走validate,然后调用共通代码验证,
提交数据的请求过来,走validate,然后也是调用这个共通的验证代码啊。。。
还有个问题是这样的,ajax和后台都走同样的验证逻辑(后台我用的struts2的验证框架),假设一个用户名的有效性验证不通过,要返回一个例如:"用户名开头不能是数字"的message,struts2的验证框架是这样的super.addFieldError("validNum", "用户名开头不能是数字"),但是ajax的话可能就返回这个msg,那这一步添加message操作放在验证逻辑里面肯定是不合适的吧,是不是验证逻辑的接口都是放回各种各样的message,这样合适吗,还是有其他的方法?
问题补充:myali88 写道把数据验证逻辑抽离出来,不管是ajax验证还是业务处理时在验证都可以调用相同的逻辑,不需要重复。可以考虑Java Bean Validation框架,或者自己写一个。
之所以要在业务操作前再校验,主要是因为考虑客户端跳过ajax验证,比如禁用js(新蛋网,没有js基本不可用,渐进增强做的不够好),所以在业务层再次校验。
还有个问题是这样的,ajax和后台都走同样的验证逻辑(后台我用的struts2的验证框架),假设一个用户名的有效性验证不通过,要返回一个例如:"用户名开头不能是数字"的message,struts2的验证框架是这样的super.addFieldError("validNum", "用户名开头不能是数字"),但是ajax的话可能就返回这个msg,那这一步添加message操作放在验证逻辑里面肯定是不合适的吧,是不是验证逻辑的接口都是放回各种各样的message,这样合适吗,还是有其他的方法?
问题补充:redstarofsleep 写道“因为要提交的东西很多,在action写很多单独的字段接收我觉得后台的代码太冗余了”
------&这个的话,可以把这些参数封装在一个类里,action里get/set的就是这一个类,类似于struts1的Form对象。
你验证数据的代码应该是共通的嘛,Ajax验证请求果类,走validate,然后调用共通代码验证,
提交数据的请求过来,走validate,然后也是调用这个共通的验证代码啊。。。
可能刚刚我讲的不够清楚,我再重新讲一遍:
ajax和后台都走同样的验证逻辑(后台我用的struts2的验证框架),假设一个用户名的有效性验证不通过,要返回一个例如:" 用户名开头不能是数字"的message,struts2的验证框架是这样的:super.addFieldError("validNum", "用户名开头不能是数字"),如果是ajax的话可能就这个msg的字符串,这个肯定放在两个不同的请求接口里的,那这个定义的验证接口返回什么合适呢,boolelean?然后判断?还是直接messages(我觉得这样不合适,但是boolean的话也不好,这个问题困扰我好久了,谢谢)
问题补充:myali88 写道把数据验证逻辑抽离出来,不管是ajax验证还是业务处理时在验证都可以调用相同的逻辑,不需要重复。可以考虑Java Bean Validation框架,或者自己写一个。
之所以要在业务操作前再校验,主要是因为考虑客户端跳过ajax验证,比如禁用js(新蛋网,没有js基本不可用,渐进增强做的不够好),所以在业务层再次校验。
可能刚刚我讲的不够清楚,我再重新讲一遍:
ajax和后台都走同样的验证逻辑(后台我用的struts2的验证框架),假设一个用户名的有效性验证不通过,要返回一个例如:" 用户名开头不能是数字"的message,struts2的验证框架是这样的:super.addFieldError("validNum", "用户名开头不能是数字"),如果是ajax的话可能就这个msg的字符串,这个肯定放在两个不同的请求接口里的,那这个定义的验证接口返回什么合适呢,boolelean?然后判断?还是直接messages(我觉得这样不合适,但是boolean的话也不好,这个问题困扰我好久了,谢谢)
问题补充:myali88 写道验证接口可以采用抛出异常的形式,不符合验证逻辑的就抛出异常,为了简单起见,不用为每个验证域定义一个异常类,可以用一个比较泛的类,比如UserValidationException,然后定义errorCode和message属性,分别表示具体的验证域和默认的错误消息。
任何地方验证时,捕获该异常,如果不特别关心验证错误的域,直接把该异常的message输出到客户端响应即可;如果需要定制验证message,可以捕获异常,然后自己向客户端添加验证错误提示。
谢谢!
问题补充:redstarofsleep 写道呵呵,那你ajax验证就不要写在validate里,写在action里,调用共通的验证逻辑。这个action就这个功能嘛!
OK,谢谢
采纳的答案
验证接口可以采用抛出异常的形式,不符合验证逻辑的就抛出异常,为了简单起见,不用为每个验证域定义一个异常类,可以用一个比较泛的类,比如UserValidationException,然后定义errorCode和message属性,分别表示具体的验证域和默认的错误消息。
任何地方验证时,捕获该异常,如果不特别关心验证错误的域,直接把该异常的message输出到客户端响应即可;如果需要定制验证message,可以捕获异常,然后自己向客户端添加验证错误提示。
[color=darkblue][b][img][flash=200,200][flash=200,200][url][img][img][img][img][img][img][img][list][*][list][*][*]引用[u][i][b][/b][/i][/u][*][/list][/list][/img][/img][/img][/img][/img][/img][/img][/url][/flash][/flash][/img][/b][/color]
要用struts的验证框架其实也是可以的。验证完成后指向一个jsp么,这个jsp上你可以去掉所有的html标签,只留下你要返回的消息就可以了。
呵呵,那你ajax验证就不要写在validate里,写在action里,调用共通的验证逻辑。这个action就这个功能嘛!
把数据验证逻辑抽离出来,不管是ajax验证还是业务处理时在验证都可以调用相同的逻辑,不需要重复。可以考虑Java Bean Validation框架,或者自己写一个。
之所以要在业务操作前再校验,主要是因为考虑客户端跳过ajax验证,比如禁用js(新蛋网,没有js基本不可用,渐进增强做的不够好),所以在业务层再次校验。
“因为要提交的东西很多,在action写很多单独的字段接收我觉得后台的代码太冗余了”
------&这个的话,可以把这些参数封装在一个类里,action里get/set的就是这一个类,类似于struts1的Form对象。
你验证数据的代码应该是共通的嘛,Ajax验证请求果类,走validate,然后调用共通代码验证,
提交数据的请求过来,走validate,然后也是调用这个共通的验证代码啊。。。
前台验证只是合法性的验证,并不能保证数据的一致性的要求,
如果两个用户同时用一个名字注册,这时候前台验证了,后台不验证就乱了
数据一致性无法保证
同意楼上的观点。对于影响业务的数据都必须在业务操作前再做验证!
两种验证都要
Ajax验证用于增强用户体验。
提交时再验证是保证数据的合法性。
看网站的类型,如果涉及交易对安全比较看重的,后台校验是肯定有的,如果只是一般的应用,但是对UI很看重的,只用前端的校验就可,当然对于一些大公司,两者是都有的
已解决问题
未解决问题

我要回帖

更多关于 javascript 生成excel 的文章

 

随机推荐