前端同事在开发接口中,在注册页面,使用图形验证码时,图形验证一直没通过,但是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);

解决,如果你有其它更好的方法,欢迎留言