PHP似乎无法正确解析为$ _COOKIE

时间:2014-02-07 22:12:04

标签: php cookies http-headers

我有一个传入的HTTP请求,看起来像这样(从客户端返回几个cookie的标准内容):

GET /loggedin.php HTTP/1.1
Cookie: name=Server+Side+Name; path=/
Cookie: role=Role+From+DB; path=/
User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.1.1; Build/JRO03C)
Host: www.example.com
Connection: Keep-Alive
Accept-Encoding: gzip

一些PHP读取:

<?php

$body = "\nThe request's _SERVER['HTTP_COOKIE'] is: " . print_r($_SERVER['HTTP_COOKIE'], true);
$body .= "\nThe request's _COOKIE is: " . print_r($_COOKIE, true);

echo $body;

?>

这导致以下输出:

The request's _SERVER['HTTP_COOKIE'] is: name=Server+Side+Name; path=/, role=Role+From+DB; path=/

The request's _COOKIE is: Array
(
   [name] => Server Side Name
   [path] => /, role=Role From DB
)

请注意$_COOKIE中的第二个条目是“路径”而不是“角色”,其值不正确。

肯定看起来$_SERVER['HTTP_COOKIE']中正确显示(尽管是连接在一起)的Cookie被错误地解析为填充$_COOKIE,但我无法相信这种情况。我控制所有元素,那么我应该做些什么来将正确的值导入$_COOKIE

如果重要,这是在EC2 Amazon Linux实例上的PHP 5.3.27上。

1 个答案:

答案 0 :(得分:0)

答案是:很容易混淆Set-CookieCookie标题。

只有Set-Cookie标题包含pathexpires等选项。 Cookie标头不起作用,因为客户在决定是否发送cookie时会使用这些选项。

我的请求在Cookie标题上包含这些选项的原因是我正在尝试解决某些Android HTTP实现的问题,并且在我的代码逻辑中使标题混淆。