前端同事在开发接口中,在注册页面,使用图形验证码时,图形验证一直没通过,但是APP验证没问题所有跑过来问我原因。一开始我以为是她代码的问题,于是,自已在本地测试了下,发现也不行。只能一步步排
1,首先,图形验证码是用的TP的captcha,APP有使用过,代码应该没有问题,那就只能找差异,首先想到的是SESSION。因为验证值是加密存到SESSION中
小程序设置相关代码如下
if (session_id != "" && session_id != null) {
var header = { 'content-type': 'application/x-www-form-urlencoded', 'Cookie': 'PHPSESSID=' + session_id }
} else {
var header = { 'content-type': 'application/x-www-form-urlencoded' }
}
然后把header加到请求头中
2,加完以后发现,在API请求中,SESSION数据打印没问题,但是在captcha图相生成中SESSION并没有生效。没有数据打印,后面发现,图形验证码的地址为https://xxx.cn/api.php/captcha/729765.html?也就是直的网页另外再写的图片,会不会是这块,没有用到我HEDER头中的SESSION?
改造后代码 PHP:
$sessionId = session_id();##当前的SESSION,返出去让前端保存,方便拿后面的数据和数据比对
returnJson(0,'',['captcha'=>captcha_src($id).'?'.$id.'&sessionId='.$sessionId,'sessionId'=>$sessionId]);##把参数传到图片生成类
##图片生成类成加入,使用当前的SESSID
if(input('sessionId')) session_id(input('sessionId'));
$captcha = new Captcha((array)Config::get('captcha'));
return $captcha->entry($id);
解决,如果你有其它更好的方法,欢迎留言