上一次(【接口相关】聊一聊数据接口的登录态校验以及JWT)说到app、小程序的数据接口一般采用token来做登录信息校验,因为用不了cookie。但是实际应用的时候如果因为某些原因必须要用cookie该怎么办了?
案例
说一下我的实际案例吧,我做过的一个小程序,背景是这个项目已经有web端,希望能有个小程序把web功能复制一遍,但是后端这边已经交付,没有人再继续维护,所以需求是在不修改后端的基础上把小程序做出来。我看了一下现有的web端,有好有坏,好的就是web端数据操作都是通过ajax调用接口来完成的,接口都是现成的;但是坏的就是数据接口和web页面在同一个域名下,由于没有跨域问题,所以用户登录状态的校验用的是cookie。
这就麻烦了,我前面说过了,小程序里面是用不了cookie的。当时就这个问题和客户也做了沟通,得到的答复就是后端已经没人再搞了,数据库也不开放给你,你自己想办法。
解决方案
不过还好,我可是会PHP的小程序开发者。我这边最终给出的方案是用PHP搭一个中间环境,模拟cookie从原来的后端接口操作数据后再转换成token形式传给小程序使用。
PHP中模拟cookie读取接口需要通过curl的相关配置来实现,基本原理是在PHP服务器端设置一个静态文件存储cookie信息,直接看代码吧
$ch=curl_init();
// 一些基本的配置
curl_setopt($ch, CURLOPT_POST, TRUE);
...
// 模拟cookie的相关配置
$cookie_file='cookie.txt'; // 服务器上存储cookie的文件
if(file_exists($cookie_file))curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
// 读取接口
$response=curl_exec($ch);
curl_close($ch);