如何使用PHP访问同一域的不同路径上的cookie值?

时间:2009-12-28 04:29:27

标签: php cookies

可以将路径参数添加到$ _COOKIE []吗?

5 个答案:

答案 0 :(得分:9)

如果您尝试访问为当前域中的其他路径设置的Cookie,则无法执行此操作。浏览器本身限制了这一点,只发送适合当前路径的cookie。

答案 1 :(得分:5)

虽然HTTP客户端(即:浏览器)没有发回cookie设置的路径,但PHP实际上假设有关其 $ _ COOKIE 数组的cookie。

如果您设置两个具有相同名称的Cookie,则其中一个值为" first-value"使用路径 / ,第二个使用值" second-value"使用路径 / test ,遵循RFC推荐(但不是必需)行为的浏览器将向您发回两个值。当您访问 / test 路径下的URL时,浏览器会发送以下内容:

Cookie: name=second-value, name=first-value

"问题"是PHP只读取第一个值 - $ _ COOKIE [' name'] 只包含值" second-value"没有暗示"第一价值"存在。如果您需要访问这两个值,则需要自己解析 $ _ SERVER [' HTTP_COOKIE'] 的值 - 这将包含" name = second-value,name =第一值"对于上面的例子。注意"第二个值"排在第一位,因为它设置了更长的路径。请注意,RFC不保证这种行为,它只说HTTP客户端应该这样做。

答案 2 :(得分:2)

是的,这是第四个参数,但如果使用当前目录所在的路径设置cookie,您将只能访问该cookie。

令人困惑......这是来自php:

  

服务器上的路径   cookie将可用。如果设置为   '/',cookie将可用   在整个域内。如果设置为   '/ foo /',cookie只会是   在/ foo /目录中可用   和所有子目录,如   / foo / bar /域名。默认   value是当前目录   正在设置cookie。

http://php.net/manual/en/function.setcookie.php

您可以像访问任何其他Cookie一样访问它。如果脚本可以访问它,它将在$ _COOKIE中可用。

答案 3 :(得分:2)

不,这样的参数是不可能的,因为浏览器不会将路径发送到服务器。它只会发送每个cookie的名称和值(因此您无法查看路径,如果它是会话cookie,何时会过期等等。)

答案 4 :(得分:2)

我认为不可能从不同的路径获取cookie,因为它可能会导致安全问题。