【问题标题】:PHP seems to fail to parse into $_COOKIE correctlyPHP 似乎无法正确解析为 $_COOKIE
【发布时间】:2014-02-07 22:12:04
【问题描述】:

我有一个看起来像这样的传入 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。

【问题讨论】:

    标签: php cookies http-headers


    【解决方案1】:

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

    只有Set-Cookie 标头具有pathexpires 等选项。 Cookie 标头没有,因为客户端在决定是否发送 cookie 时会使用这些选项。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-12
      • 1970-01-01
      • 1970-01-01
      • 2013-04-11
      • 1970-01-01
      • 2019-03-05
      相关资源
      最近更新 更多