thinkphp5 验证码跨域/验证失败 问题解决方案

说明
后端: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里面的设置,都是没有增加验证码标识的
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值