方式1,应用服务器负责生成验证码字符,验证码服务器主要负责验证码图片生成。

- 用户浏览器向应用服务器请求包含验证码的页面;
- 应用服务器生成验证码字符,存储在session中;应用服务器发送相关图片参数(验证码字符、宽、高、复杂度、背景色等)到验证码服务器;
- 验证码服务器返回图片地址到应用服务器;
- 应用服务器将包含验证码地址的网页发送给用户浏览器;
- 用户浏览器通过img的src方式向验证码服务器请求验证码图片;
- 验证码服务器输出验证码图片流到用户浏览器;
- 用户判读验证码图片,提交表单;
- 应用服务器取出session中的验证码字符比对,返回结果。
这种方式的优点:
- 较少的HTTP请求调用
- 替换原应用中独立的验证码功能相对容易
- 验证码服务器相对简单
方式2,验证码服务器承担验证功能,应用服务器在验证中仅起到传递作用。

- 用户浏览器向应用服务器请求包含验证码的页面;
- 应用服务器发送相关图片参数(宽、高、复杂度、背景色等)到验证码服务器;
- 验证码服务器返回图片地址、惟一的会话id到应用服务器;
- 应用服务器将包含验证码地址的网页发送给用户浏览器;
- 用户浏览器通过img的src方式向验证码服务器请求验证码图片;
- 验证码服务器输出验证码图片流到用户浏览器;
- 用户判读验证码图片,提交表单;
- 应用服务器将第三步获得的会话id和用户输入的验证码字符传给验证码服务器;
- 验证码服务器进行验证,返回通过或拒绝;
- 应用服务器根据验证码服务器结果进行响应。
这种方式的优点:
- 验证码服务功能完善,涵盖整个验证流程;
- 验证码服务端有详细的验证日志记录,便于数据分析;
欢迎大家就两种方式发表意见~
摊手 我没意见
@dearaprilfool, 这次回复的验证码是dearaprilfool
呵呵,抛砖引玉了
如果验证码是用来做ocr的话,第二个倒是很不错的选择
@Marshall, reCaptcha.net是用验证码做ocr,可是我至今都不理解如果他们自己都不知道图片上的文本的话如何实现验证呢
recaptcha不是两个单词吗,应该是一个用来验证用户,一个就用来ocr吧
@Marshall, 那是不是应该有一个输错了没有关系||||
@Marshall, 找到一篇,还是发在science上的 http://recaptcha.net/reCAPTCHA_Science.pdf
回去细看
Pingback: Orzcc Online » Blog Archive » Anti-spam