最近遇到的问题
最近在对接java的一个程序,用到了cookie,发现java获取到cookie没有丢失字符串,但是PHP丢失了“+”
下面我们来模拟一下当时的情况
比如我用PHP设置一个cookie(当时的cookie是java设置的,没有对cookie进行urlencode(),所以我们用setrawcookie()模拟)
注意:setrawcookie()与setcookie()是不一样的,setcookie()会对cookie的值自动进行urlencode()的。
<?php
setrawcookie('tttt','1221323+ewer+/ddde+q441');
接下来在浏览器看效果,发现跟设置时候是一致的,到这里没有出现问题
我们再打印一下$_COOKIE,发现“+”没有了,wtf!!!
<?php
echo json_encode($_COOKIE,256|64);exit;
原因分析:不晓得
解决办法:这个知道
我们先看一下请求头信息,发现在头部信息中cookie是完整的,那就从这里获取吧
<?php
$cookieStr = getallheaders()['Cookie'];
$cookies = explode(';',$cookieStr);
foreach($cookies as $cookie)
{
$cookieTmp = explode('=',$cookie);
$_COOKIE[trim($cookieTmp[0])] = trim($cookieTmp[1]);
}
其他解决办法:
- 对cookie的值进行base64_encode(),拿来使用的时候再base64_decode()
- php设置cookie的时候,使用setcookie()而不是setrawcookie(),若是其他语言先urlencode()