说明
后端:thinkphp5
前端:vue
我做的是子域名跨域,不是主域名跨域。
例如:
前端:aa.xxx.com
后端:bb.xxx.com
如果是主域名跨域,我试过网上的方法,没成功,session获取都是空,所以,如果主域名跨域的话,建议把session保存到数据库或者nosql里面。要不然可以把 验证码 改成用缓存存储的,不用session就可以,这篇帖子有些(点击查看)不过我没有试过,但是觉得理论上是可以的。
首先是解决跨域问题
因为我是只有验证码部分需要跨域,所以我在构造器里面增加了析构函数
Public function _initialize(){
header("Access-Control-Request-Method:GET,POST");
header("Access-Control-Allow-Credentials:true");
header("Access-Control-Allow-Origin:子域名");
header("Access-Control-Allow-Headers:token,Content-Type, Authorization, Accept, Range, Origin,Token,language");
}
前端设置可以携带cookie
在ajax或者axios里面增加下面代码
withCredentials: true // 可以携带cookie
都设置好以后,我发现验证码还是验证错误,我就查看前端的返回值
首先我在后端返回了全部session,使用以下代码
$result['sess'] = $_SESSION;
return json_encode($result);
前端获取到的结果是
和我通过vue测试的时候,利用vue.config.js配置代理获取到的session的id是不一样的,下面是利用代理获取到的session
然后我就在$captcha->check($code,'captcha')
的时候,增加了一个验证码标识。然后就可以正常验证了。
我也检查过,我并没有配置过验证码的验证码标识,按理说应该是默认的,但是不知道为什么会增加一个验证码标识。不知道有没有大神能给解释一下
我检查过PHP里面的config设置,也检查过captcha里面的设置,都是没有增加验证码标识的