我正在尝试使用 php 中的 setCookie 函数设置 cookie。我第一次启动浏览器时,它不起作用。当我重新加载页面时,我正在从服务器接收 cookie。这证明了 setCookie() 函数在没有收到 $_SERVER["http_referer"] 时不起作用。php.ini 文件中是否有任何设置可以解决此问题?
3 回答
你的结论是错误的。您可以通过配置浏览器来证明这一点,使其永远不会发送Referer
HTTP 标头。
一旦设置了 cookie,就可以在下一页加载时使用 $_COOKIE 或 $HTTP_COOKIE_VARS 数组访问它们。
用简单的英语来说,这意味着$_COOKIE
包含页面接收的 cookie ,而不是发送的 cookie 。
编辑:你不能让 PHP$_COOKIE
自动附加传出的 cookie,但没有什么能阻止你自己做——超全局变量不是只读的:
setcookie("TestCookie", $value);
$_COOKIE["TestCookie"] = $value;
据我所知.. cookie 在页面刷新后变为活动状态。是否设置无关紧要$_SERVER['HTTP_REFERER']
:
一旦设置了 cookie,就可以在下一页加载时使用 $_COOKIE 或 $HTTP_COOKIE_VARS 数组访问它们。注意,像 $_COOKIE 这样的超全局变量在 PHP 4.1.0 中可用。Cookie 值也存在于 $_REQUEST 中。
有关cookie 的使用,请参阅此处的文档。
$_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
}