利用SESSION技术实现的验证码,在做后台登录时没问题,但用他做文章讨论的验证码时就有问题了:
1.在打开新网页时前一个网页上显示的验证码就无效了。因为他只记录最后生成的一个验证码。
2.如果用户看了你半天文章,超过了session的有效期,那么他评论时,验证码会显示过期,有时还会出现用户用户输入了半天的内容消失的情况,非常不利于交互。
目前本人试过的方法:
验证码失效:用xmlhttp实现读取本网站任意一网页头"HEAD",或读内容"GET",以让网页SESSION时间延长,结果失败。代码如下:
//不让验证码失效
checkcode_yongfa365()
function checkcode_yongfa365()
{
timer2=window.setTimeout("checkcode_yongfa365()",1000*60*10);
XMLHTTP = new ActiveXObject("Microsoft.XMLHTTP");
XMLHTTP.open("GET","http://www.yongfa365.com/index.htm",true);
XMLHTTP.send();
}
曾分析过Z-blog,他有三个函数,生成,取得,验证,验证码,使用的是application技术,看了半天也没看懂(主要是内心反对使用这个对象)
好的验证码应该是:
1.每页都有自己的验证码
2.验证码不会过期
3.验证码应该可以让用户更换,以便看清,且有明显提示“看不清?”,而不是手放到图片上才显示。
我见到过的可以实现的例子有http://www.ky530.com/blog,http://hi.baidu.com/yongfa365,这里面的文章就是每一文章就有一个验证码,不知道如何实现好。
欢迎大家探讨,或直接给出好的例子来。
SESSION名称不一样,可以用网页的名称
调用 时<img src=checkcode.asp?txtTitle=a123456 >
session("a123456")=yongfa365
提交判断时用if session(request("txtTitle"))=request("checkcode")
应该可以
##################################################################
关于SESSION过期的问题
可以用COOKIES,在存储之前先用MD5加密一下.
服务器写到客户的cookie里,不管多长时间后,用户提交数据,服务器if request.cookies("md5title")<>md5(request("checkcode")) then errormsg("验证码不正确")
####################################################################
听说cookie可能有漏洞,不知道在这方面会不会存在漏洞,感觉已经可以实现了,如果大家有更好的方法可以提出来咱们共享下。
终于可以实现了。
页面调用验证码时,带一个参数
eg. a.asp?md5title=ASDDSGFHFGHKJ
验证码页面接收这个md5title, 然后根据这个生成以md5title为变量名,生成的验证码用md5加密后为值。以cookie形式保存到客户端。
eg. response.cookies(request("md5title"))=md5(生成的随机码)
用户无论打开多少个页面,当他在其中一个页面发表评论时,这个页面会向服务器提交一个带有md5title的内容及表单里的输入验证码的值 。在服务器端进行判断。
eg. if request.cookies(request("md5title"))=md5(request("checkcode"))
引用本页地址:
http://www.yongfa365.com/item/Checkcode-ASP-Session-Cookies-Method-yongfa365.html