-4

我正在尝试使用 php 中的 setCookie 函数设置 cookie。我第一次启动浏览器时,它不起作用。当我重新加载页面时,我正在从服务器接收 cookie。这证明了 setCookie() 函数在没有收到 $_SERVER["http_referer"] 时不起作用。php.ini 文件中是否有任何设置可以解决此问题?

4

3 回答 3

5

你的结论是错误的。您可以通过配置浏览器来证明这一点,使其永远不会发送RefererHTTP 标头。

setcookie() 手册页

一旦设置了 cookie,就可以在下一页加载时使用 $_COOKIE 或 $HTTP_COOKIE_VARS 数组访问它们。

用简单的英语来说,这意味着$_COOKIE包含页面接收的 cookie ,而不是发送的 cookie 。


编辑:你不能让 PHP$_COOKIE自动附加传出的 cookie,但没有什么能阻止你自己做——超全局变量不是只读的:

setcookie("TestCookie", $value);
$_COOKIE["TestCookie"] = $value;
于 2013-07-04T10:38:43.217 回答
0

据我所知.. cookie 在页面刷新后变为活动状态。是否设置无关紧要$_SERVER['HTTP_REFERER']

一旦设置了 cookie,就可以在下一页加载时使用 $_COOKIE 或 $HTTP_COOKIE_VARS 数组访问它们。注意,像 $_COOKIE 这样的超全局变量在 PHP 4.1.0 中可用。Cookie 值也存在于 $_REQUEST 中。

有关cookie 的使用,请参阅此处的文档。

于 2013-07-04T10:39:12.030 回答
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
}
于 2013-07-04T10:40:15.030 回答