我正在尝试使用php中的setCookie函数设置cookie。我第一次启动浏览器时,它无法正常工作。当我重新加载页面时,我正在从服务器接收cookie。这证明当没有收到$ _SERVER [“http_referer”]时,setCookie()函数不起作用。 php.ini文件中是否有任何设置可以解决这个问题?
答案 0 :(得分:5)
你的结论是错误的。您可以通过配置浏览器来证明从不发送Referer
HTTP标头。
设置好Cookie后,可以在下一页访问它们 使用$ _COOKIE或$ HTTP_COOKIE_VARS数组加载。
简单来说,这意味着$_COOKIE
包含页面收到的Cookie,而不是发送的。
编辑:您无法让PHP自动将传出的Cookie附加到$_COOKIE
,但没有任何东西阻止您自己执行此操作 - 超级全局不是只读的:
setcookie("TestCookie", $value);
$_COOKIE["TestCookie"] = $value;
答案 1 :(得分:0)
据我所知,在页面刷新后,cookie会变为活动状态。设置$_SERVER['HTTP_REFERER']
无关紧要:
设置好cookie后,可以在下一页加载$ _COOKIE或$ HTTP_COOKIE_VARS数组时访问它们。注意,$ _COOKIE等超级全局变量在PHP 4.1.0中可用。 Cookie值也存在于$ _REQUEST中。
See Documentation here关于使用cookies。
答案 2 :(得分:0)
$ _ COOKIE在执行PHP脚本之前填充(使用用户已有的任何cookie)。当您致电setcookie()
时,它不会自动更新$ _COOKIE全局变量。但是,在下一页加载时,它将正确填充。
当用户从服务器请求页面时,它会将该域的所有Cookie发送到服务器。然后,服务器将使用它来填充$ _COOKIE全局变量,然后执行您的脚本。
当您调用setcookie()
函数时,会将响应标头添加回客户端(仅在整个页面执行完毕后发送)告诉它存储此新cookie。因此,当用户下次请求页面时,它会将此新cookie发送给您。
要在代码中“修复”此问题,您可以执行以下操作:
<?php
if (!isset($_COOKIE['my_cookie']))
{
setcookie('my_cookie', 'value');
$_COOKIE['my_cookie'] = 'value';
}
// do logic with $_COOKIE here
if (isset($_COOKIE['my_cookie']) && $_COOKIE['my_cookie'] = 'x')
{
// do something
}