【发布时间】:2009-12-28 04:29:26
【问题描述】:
$_COOKIE[]可以加路径参数吗?
【问题讨论】:
-
您可能会发现
$cookie->setPath($path)很有帮助,如在 this standalone library 中找到的。
$_COOKIE[]可以加路径参数吗?
【问题讨论】:
$cookie->setPath($path) 很有帮助,如在 this standalone library 中找到的。
如果您尝试访问为同一域上与当前路径不同的路径设置的 cookie,则无法做到这一点。浏览器本身对此进行了限制,仅发送适合当前路径的 cookie。
【讨论】:
虽然 HTTP 客户端(即:浏览器)不会发回设置 cookie 的路径,但 PHP 实际上就其 $_COOKIE 数组对 cookie 做出了假设。
如果您设置两个具有相同名称的 cookie,一个具有路径 / 的值“first-value”,另一个具有路径 /test 的值“second-value” ,遵循 RFC 中推荐的(但不是必需的)行为的浏览器会将这两个值发回给您。当您访问 /test 路径下的 URL 时,浏览器会发送以下内容:
Cookie: name=second-value, name=first-value
“问题”是 PHP 只读取第一个值 - $_COOKIE['name'] 将只包含值“second-value”而没有提示“first-value”存在.如果您需要访问这两个值,则需要自己解析 $_SERVER['HTTP_COOKIE'] 的值 - 这将包含上述的“name=second-value, name=first-value”例子。请注意,“第二值”排在第一位,因为它设置了更长的路径。请注意,RFC 不保证这种行为,它只是说 HTTP 客户端应该这样做。
【讨论】:
$_COOKIE[] 一个路径,你可以告诉setcookie 一个路径。我们用 API 来面对这个问题。所以你实际上可以告诉setcookie 设置根路径,然后在任何地方访问它,就像这样:setcookie('name', 'data', expire, '/')。最后一个参数是路径并将其设置为/ 使其成为根路径。这将解决 OP 的问题。
$cookies = parse_ini_string( str_replace( ";" , "\n" , $_SERVER['HTTP_COOKIE'] ) ) ;
是的,这是第 4 个参数,但只有使用当前目录所在的路径设置 cookie,您才能访问该 cookie。
这令人困惑......这是来自 php:
服务器上的路径 cookie 将可用。如果设置为 '/', cookie 将可用 整个域内。如果设置为 '/foo/',cookie 只会是 在 /foo/ 目录中可用 以及所有子目录,例如 /foo/bar/ 的域。默认 value 是当前目录 正在设置 cookie。
http://php.net/manual/en/function.setcookie.php
您可以像访问任何其他 cookie 一样访问它。如果脚本可以访问它,它将在 $_COOKIE 中可用。
【讨论】:
不,这样的参数是不可能的,因为浏览器不会将路径发送到服务器。它只发送每个 cookie 的名称和值(所以你看不到路径,如果它是会话 cookie,什么时候过期等等)。
【讨论】:
我认为不可能从其他路径获取 cookie,因为它可能会导致安全问题。
【讨论】: