我有一个传入的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上。
答案 0 :(得分:0)
答案是:很容易混淆Set-Cookie
和Cookie
标题。
只有Set-Cookie
标题包含path
和expires
等选项。 Cookie
标头不起作用,因为客户在决定是否发送cookie时会使用这些选项。
我的请求在Cookie
标题上包含这些选项的原因是我正在尝试解决某些Android HTTP实现的问题,并且在我的代码逻辑中使标题混淆。