PHP - setrawcookie()返回false

时间:2014-07-18 17:24:52

标签: php cookies url-encoding restful-architecture

我目前正在尝试使用它的SignIn函数连接我项目的RESTful API,后者返回一个授权令牌用作cookie。我们的大部分项目都是用C#编写的,但是我试图在PHP中创建一个SignIn方法并且遇到了一个问题。

我设法从API中取回授权令牌作为字符串,但每次我尝试将该字符串设置为cookie的值时,我回来的cookie中都包含不正确的字符。

例如,在我们的RESTful API上为SignIn设置的cookie如下所示:

1DEbKeyynVTbXeRJ2i5j2+UgwgmuD17VgQ

然而,使用setcookie()时我得到的cookie给了我......

1DEbKeyynVTbXeRJ2i5j2%2BUgwgmuD17VgQ

" +"角色正在转变为"%2B"。我听说过使用setrawcookie()作为解决方案,但是我的setrawcookie()返回false,其中setcookie()返回true。

这不起作用:

$result = curl_exec($ch);
echo setrawcookie("authtoken", $result, 0, "/", "www.arbitratum.com", 1);

这可行,但是给了我%2B代替+。

$result = curl_exec($ch);
echo setcookie("authtoken", $result, 0, "/", "www.arbitratum.com", 1);

有谁知道为什么这可能不起作用?或者我如何在我的cookie中获得正确的字符?当我回显$ result字符串时,浏览器中显示的字符串使用正确的" +"性格,所以我真的很困惑这个问题。

1 个答案:

答案 0 :(得分:1)

Cookie是网址编码的,因此当通过HTTP +发送被%2B替换时,为了符合规范,每个浏览器和后端服务器都知道(或者知道)如何处理它。

所以问题是你如何处理C#中的cookie ...你只是从请求中读取标题信息,然后你应该记住url解码值,这样你就会取回包含+字符的字符串。