ThinkPHP跨域设置”samesite=none”和“secure”参数的方法和注意事项

时间:21-10-21 栏目:问题及解决 作者:admin 评论:0 点击: 3,269 次

因开发插件需要,将另一个网站的数据通过AJAX添加到ThinkPHP制作 的一个网站上的购物车。
需要网站支持跨域请求同步COOKE,具体操作如下:
/public/index.php
第二行添加以下代码:
$ACAO = '*';
header("Access-Control-Allow-Credentials: true"); //允许COOKIE共享
header("XDomainRequestAllowed: 1"); //允许COOKIE共享IE
if(!empty($_SERVER['HTTP_ORIGIN'])) $ACAO = $_SERVER['HTTP_ORIGIN'] ;
header("Access-Control-Allow-Origin: $ACAO");
// header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Credentials: true");//是否允许后续请求携带认证信息(cookies),该值只能是true,否则不返回
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
header("Access-Control-Allow-Headers: Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With, X-Ds-Key");
header("P3P: CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR");

/thinkphp/library/think/Cookie.php
的$_COOKIE[$name] = $value;下添加

$cookie = "{$var}={$value}";
if($time) $cookie .= "; expires=".gmstrftime("%A, %d-%b-%Y %H:%M:%S GMT",$time + 86400)."";
if($path) $cookie .= "; path={$path}";
if($host) $cookie .= "; domain={$host}";
$cookie .= "; SameSite=None";
$cookie .= "; Secure";
header("Set-Cookie: {$cookie}");

即可。
注意事项:

跨域Cookie要求带SameSite=None; Secure
而Secure属性要求当前页面必须是HTTPS
所以在HTTP下发送带Secure参数的Cookie会被浏览器忽略
导致不是https时登录或语言切换设置Cookie无法记录
而在https下切换语言和登录会正常.
解决方案:
在以下文件添加代码
/application/当前模板名/index/view/common/meta.html

ThinkPHP跨域设置”samesite=none”和“secure”参数的方法和注意事项:等您坐沙发呢!

发表评论


------====== 本站公告 ======------
联系信息:
电话:19970108113(微信同号) QQ:3142401606
支付宝:https://me.alipay.com/lxq73061
相关插件程序等信息均会在站内发布,敬请关注。

读者排行