SYF's SKY
积累是基础,协调是手段,专注是关键,创新是动力,价值是目标,体验是目的。
新问题验证码

前段时间spam比较多,临时添加了问题验证码功能(bmp图形验证码的原理还没有去研究^_^)。

临时问题验证码有一点点效果。当时的实现方式最大的问题是问题的答案也在网页的源文件中,作为参数传递。

这两天仔细狠下心来对验证码这块做了修改。先后调试了两套方案,第一套以失败告终,第二套就是现在评论系统使用的验证码。

第一套:md5+cookie。

原理:先对临时产生的问题的答案进行md5加密,然后将md5值作为参数在网页中传递,再对用户输入的答案进行md5加密,最后比较两个md5值。

问题:这套方案最终没有成功。最直接的原因是找不到两套相同md5加密程序(asp服务器端的vbscript版本和本地客户端的JavaScript版本),自己不会写,在网上找了好多套,差不多都是一样的。后来换了个思路,只利用服务器端的md5程序。新问题就是,在不刷新网页的情况下,如何将客户端的用户的答案作为服务器端的md5程序的参数。服务器端的参数可以给客户端程序调用,但是反过来的调用好像行不通。不过后来又试了一种方法。将客户端的用户答案写入cookie,然后服务器端读取cookie作为md5程序的参数。新问题就是,用JavaScript脚本写入cookie必须要刷新网页,不刷新是写不进去的。只好作罢。

第二套:ajax。

原理:1、验证码文本框获得焦点时,在问题DIV为空的情况下初始化问题(即随机显示一个问题)。2、验证码文本框失去焦点时,在答案不为空的情况下进行验证。3、单击问题可以改变随机问题。4、一些小提示,以提高用户的体验。

Ajax实现这样的一个功能应该算是比较简单比较容易了。但因为自己是第一次写ajax,所以有点手忙脚乱,思路也不清楚,需要完善和优化的细节太多了。

PS:写完第一套,突然觉得有一个新问题,自己是在同一台机器上调试的,服务器和客户机是一个。asp读取cookie是在服务器上,JavaScript写入的是在客户端上。当服务器和客户机不是同一台机器的时候,那么这个第一套方案是不是就直接over了?哎,这就是在缺乏经验,没有良好思维习惯情况下的正常表现。

Trackblog地址:trackblog.asp?TrackblogID=1150
快来评论吧,欢迎欢迎,热烈欢迎^_^
[1]syf|2009年9月27日

新验证码还不错,不过还有很多地方要修改,比如跨浏览器问题(现在只是在IE7上测试通过)。

[2]子言|2009年9月28日

不懂

[3]唏嘘一世|2009年9月29日

试过非IE浏览器下运行吗?Opera下面不可以使用,不知道火狐行不行

[4]syf|2009年9月29日

唏嘘兄,Opera下提示不能正常运行,而FF下更是搞笑,问题都没出来,更恐怖的是随便输什么答案就可以了。国庆节的时候再修改一下!谢谢!

[5]唏嘘一世|2009年9月29日

我来用火狐试试:)

[6]syf|2009年9月29日

问题出来了吧,哈哈~过两天就改。

[7]syf|2009年10月1日

已经做了修改。在Opera10.0版本、Firefox3.0版本、IE7版本下测试通过。

[8]syf|2009年10月2日

这是在谷歌chrome下的测试,正常!

[9]唏嘘一世|2009年10月5日

嗯,现在好多了。光支持IE肯定不行:)

[10]Goberl|2009年10月28日

“用JavaScript脚本写入cookie必须要刷新网页,不刷新是写不进去的。”是由于服务器端要读取cookie,必须刷新页面,不刷新页面,cookie是没有传输到服务器端的。

其实使用加密的算法还不错,在服务器端加密后发送到客户端,客户端对输入数据加密后在比较,不过现在的MD5很多都很容易解密,也不是那么安全了.hash好一点

“是由于服务器端要读取cookie,必须刷新页面,不刷新页面,cookie是没有传输到服务器端的。”我是这样做的:1、评论页面载入完成。2、用户输入评论。3、用户发送评论时,先用javascript把验证码写入cookie,再在js中嵌入asp读取客户端cookie,将读取的内容md5加密(问题就在这一步,页面不刷新,似乎嵌入的asp就无法执行。再研究一下)。4、将结果和服务器端的加密结果作比较。

md5很容易解密?啊?前段时间看到过这样的新闻。很容易就比较汗了~哈哈。hash试试。(syf,2009年10月29日回复)

[11]Goberl|2009年10月28日

你的留言在提交成功了建议把内容清除了,我还以为没有发送成功呢?

嗯,应该再增加一个成功发送的提示!谢谢关注~~~(syf,2009年10月29日回复)

[12]唏嘘一世|2009年10月30日

现在很不错了。

不过在评论中,最好将姓名加上链接,在“博客”2字中加链接是没有意义的,在姓名上加链接可以增加用户的参与。

有道理。听取唏嘘兄的意见,今天重点把首页修改了一下,增加了很多东西。用户不用点击太多次就能获取很多信息,这也算提高用户体验吧。而且这样对搜索引擎很友好,是吧。谢谢唏嘘兄关注,常来看看,多提意见和建议~(syf,2009年10月30日回复)

[13]唏嘘一世|2009年10月30日

不过你的评论是AJAX输出的,这点已经不重要了,不过评论输出还是不使用ajax的好。

现在发现评论用AJAX输出完全没有意义。这个也要改掉,想要评论还要再点击一次,是跟用户过不去^_^。谢谢~(syf,2009年10月30日回复)

初学AJAX,到处用,嘿嘿~新奇~(syf,2009年10月31日回复)

聚博
(选)
姓名
(必)
Email
(选)
博客
http://
(选)
验证码
(必)
内 容
(必)
(您的留言会马上发到我的手机上,一般几分钟后就能看到我的回复了^_^)
Copyright©2008~2010 syf's sky,All Rights Reserved