设为首页
收藏本站
Archiver
用户
登录
入住
用户名
Email
自动登录
找回密码
密码
登录
入住 CI 中国社区
首页
返回 CodeIgniter 中国首页
论坛
BBS
导读
Guide
个人主页
Space
中文手册
搜索
CodeIgniter 搜索引擎
视频教程
案例
任务
搜索
搜索
本版
帖子
用户
设为首页
收藏本站
Archiver
开启辅助访问
切换到宽版
日志
相册
分享
记录
CodeIgniter4
CodeIgniter3
CodeIgniter2
帖子
好友
道具
勋章
收藏
任务
记录
留言板
设置
我的收藏
退出
腾讯QQ
微信登录
CodeIgniter 中国开发者社区
»
论坛
›
Developers
›
Web 开发综合讨论
›
Kohana上验证码类的应用问题
返回列表
查看:
6196
|
回复:
7
Kohana上验证码类的应用问题
[复制链接]
szlinz
szlinz
当前离线
积分
174
IP卡
狗仔卡
发表于 2008-10-29 09:34:40
|
显示全部楼层
|
阅读模式
我想实现的功能:通过AJAX传递参数对验证码进行验证
操作过程:
1.页面通过以下代码实现验证码生成:
PHP
复制代码
$captcha
=
new
Captcha
;
$date
=
array
(
'captcha'
=>
$captcha
->
render
(
)
)
;
$view
=
new
View
(
"reguser"
)
;
$view
->
date
=
$date
;
$view
->
render
(
true
)
;
复制代码
2.生成具有验证码页的页面后,通过AJAX进行GET参数传递,传递参数后的验证代码如下:
PHP
复制代码
function
checkCode
(
)
{
$this
->
uri
=
new
URI
;
$result
=
$this
->
uri
->
segment
(
'captcha'
)
;
$captcha
=
new
Captcha
;
$captcha
->
valid
(
$result
)
;
if
(
$captcha
->
valid_count
(
)
>
0
)
{
echo
"验证码通过"
;
$captcha
->
reset_count
(
)
;
}
else
{
echo
"验证码不通过"
;
}
}
复制代码
现在问题来了,如果是第一次输入了正确的验证码,可以通过,反之,第一次输入错误,返回出错信息后,再次输入,就算你输入的是正确的,它也提示出错,是否每次建立一个 new Captcha就会重新生成一个新的验证码?因为我是通过AJAX进行验证的,所以页面上的验证码依然是第一次生成的,没变过。如果真是那样,有没有什么办法可以在保持第一次生成验证码不变的基础上进行多次验证呢?
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
显身卡
szlinz
szlinz
当前离线
积分
174
IP卡
狗仔卡
楼主
|
发表于 2008-10-29 09:50:28
|
显示全部楼层
在线等哦,希望知道的能说一下,不胜感激。
回复
支持
反对
使用道具
举报
显身卡
Hex
Hex
当前离线
积分
50169
IP卡
狗仔卡
发表于 2008-10-29 10:11:55
|
显示全部楼层
帮顶,我不是 Kohana 专家,呵呵。
回复
支持
反对
使用道具
举报
显身卡
szlinz
szlinz
当前离线
积分
174
IP卡
狗仔卡
楼主
|
发表于 2008-10-29 10:45:20
|
显示全部楼层
继续等待中。。。。。。
回复
支持
反对
使用道具
举报
显身卡
szlinz
szlinz
当前离线
积分
174
IP卡
狗仔卡
楼主
|
发表于 2008-10-31 11:40:11
|
显示全部楼层
解决方法如下:
因为每次生成一个 new Captcha 时都会自动生成一个新的验证码,所以,在第一次生成验证码后通过Ajax进行验证时,不要再用new Captcha重新生成,而是直接取第一次生成验证码时产生的Session值"captcha_response"进行验证,该值采用sha1进行了加密。
代码如下:
PHP
复制代码
//验证码检验
function
checkCode
(
)
{
$this
->
uri
=
new
URI
;
$result
=
sha1
(
strtoupper
(
$this
->
uri
->
segment
(
'captcha'
)
)
)
;
if
(
$result
===
Session
::
instance
(
)
->
get
(
'captcha_response'
)
)
{
echo
"验证通过"
;
}
else
{
echo
"验证失败"
;
}
}
复制代码
回复
支持
反对
使用道具
举报
显身卡
Hex
Hex
当前离线
积分
50169
IP卡
狗仔卡
发表于 2008-10-31 12:37:28
|
显示全部楼层
那什么时候生成新的验证码呢?
回复
支持
反对
使用道具
举报
显身卡
doutu
doutu
当前离线
积分
114
IP卡
狗仔卡
发表于 2008-11-1 16:27:22
|
显示全部楼层
PHP
复制代码
//验证码检验
function
checkCode
(
)
{
$this
->
uri
=
new
URI
;
$result
=
$this
->
uri
->
segment
(
'captcha'
)
;
$captcha
=
Captcha
::
instance
(
)
;
$captcha
->
valid
(
$result
)
;
if
(
$captcha
->
valid_count
(
)
>
0
)
{
echo
"验证码通过"
;
$captcha
->
reset_count
(
)
;
}
else
{
echo
"验证码不通过"
;
}
}
复制代码
这个版本如果还是不能满足你的要求,你可以使用szlinz 的解决方案,自己取session值来验证。Hex问的生成新的验证码时间,可以使用request::is_ajax(),来判断是不是页面首次加载或F5刷新来生成:
PHP
复制代码
if
(
request
::
is_ajax
(
)
)
{
//~取session值验证
}
else
{
//~new Captcha();
}
复制代码
回复
支持
反对
使用道具
举报
显身卡
Hex
Hex
当前离线
积分
50169
IP卡
狗仔卡
发表于 2008-11-1 16:36:05
|
显示全部楼层
doutu 解答的很清楚,非常感谢!
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
入住 CI 中国社区
本版积分规则
发表回复
回帖后跳转到最后一页