PHP Cookies问题

PHP Cookies问题,php,cookies,Php,Cookies,嗨:)这很奇怪——我在打电话: setcookie("ApplicationUserRank", "test", mktime (0, 0, 0, 1, 1, time()+60*60*24*30)); 然后,在另一个文件中调用: echo $_COOKIE["ApplicationUserRank"]; 然而,回音是空白的!我真的不确定我做错了什么,有人愿意解释一下吗?:) 编辑: 根据Richard的建议,我运行了以下代码: echo "COOKIE: " . $_COOKIE["App

嗨:)这很奇怪——我在打电话:

setcookie("ApplicationUserRank", "test", mktime (0, 0, 0, 1, 1, time()+60*60*24*30));
然后,在另一个文件中调用:

echo $_COOKIE["ApplicationUserRank"];
然而,回音是空白的!我真的不确定我做错了什么,有人愿意解释一下吗?:)

编辑: 根据Richard的建议,我运行了以下代码:

echo "COOKIE: " . $_COOKIE["ApplicationUserRank"];
直接在设置cookie之后。还是空白!发生了一些非常奇怪的事情

编辑到我的编辑:


事实证明,重新运行代码确实会显示cookie!我猜$\u COOKIE不会从setcookie命令加载。事实上,现在我想起来了,我在某个地方读到了。。。无论如何,似乎同一个web文件能够读取这些cookies。。。只是没有其他的饼干。(这当然是在应用了下面建议的许多修复之后)

在Chrome或Safari中,web inspector上有一个资源选项卡,您也可以查看cookies集。检查cookie是否确实存在。

在Chrome或Safari中,web inspector上有一个资源选项卡,允许您查看cookie集。检查cookie是否确实存在。

您的代码运行良好,我对其进行了测试,cookie正在设置中


检查是否未更改另一个文件中该cookie的值。

您的代码运行正常,我对其进行了测试,cookie正在设置中

检查是否未在另一个文件中更改该cookie的值

setcookie()定义一个cookie,该cookie将与文件的其余部分一起发送 HTTP头。与其他标头一样,cookies必须在任何 脚本的输出(这是协议限制)。这 要求在任何输出之前调用此函数, 包括和标记以及任何空格

设置cookie后,可以在下一页访问它们 使用$\u COOKIE或$HTTP\u COOKIE\u VARS数组加载。注意,超球 例如$\u COOKIE在PHP4.1.0中可用。Cookie值也是 存在于$\u请求中

在设置cookie之前,您可能已经将某些内容输出到浏览器。 这是我唯一能想到的

见示例:

<?php
if(!isset($_COOKIE["ApplicationUserRank"]))
{
    setcookie("ApplicationUserRank", "new test", mktime (0, 0, 0, 1, 1, 9001));
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>

<?php
if(isset($_COOKIE["ApplicationUserRank"]))
{
echo    $_COOKIE["ApplicationUserRank"];
}
?>
</body>
</html>

无标题文件
然而,这一切都将过去

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<?php
if(!isset($_COOKIE["ApplicationUserRank"]))
{
    setcookie("ApplicationUserRank", "new test", mktime (0, 0, 0, 1, 1, 9001));
}

if(isset($_COOKIE["ApplicationUserRank"]))
{
echo    $_COOKIE["ApplicationUserRank"];
}
?>
</body>
</html>

无标题文件
将失败

setcookie()定义一个cookie,该cookie将与文件的其余部分一起发送 HTTP头。与其他标头一样,cookies必须在任何 脚本的输出(这是协议限制)。这 要求在任何输出之前调用此函数, 包括和标记以及任何空格

设置cookie后,可以在下一页访问它们 使用$\u COOKIE或$HTTP\u COOKIE\u VARS数组加载。注意,超球 例如$\u COOKIE在PHP4.1.0中可用。Cookie值也是 存在于$\u请求中

在设置cookie之前,您可能已经将某些内容输出到浏览器。 这是我唯一能想到的

见示例:

<?php
if(!isset($_COOKIE["ApplicationUserRank"]))
{
    setcookie("ApplicationUserRank", "new test", mktime (0, 0, 0, 1, 1, 9001));
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>

<?php
if(isset($_COOKIE["ApplicationUserRank"]))
{
echo    $_COOKIE["ApplicationUserRank"];
}
?>
</body>
</html>

无标题文件
然而,这一切都将过去

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<?php
if(!isset($_COOKIE["ApplicationUserRank"]))
{
    setcookie("ApplicationUserRank", "new test", mktime (0, 0, 0, 1, 1, 9001));
}

if(isset($_COOKIE["ApplicationUserRank"]))
{
echo    $_COOKIE["ApplicationUserRank"];
}
?>
</body>
</html>

无标题文件

将失败

相信Tarek的答案,并考虑到rlemon所说的,尝试函数
ob\u start()
ob\u end\u flush()
可能会很有用。它们是输出缓冲区控制函数

例如:

<?php
// php starts collecting the buffer rather than just sending it all out.
ob_start();

if(!isset($_COOKIE["ApplicationUserRank"])) {
    // This should throw an error about headers already being sent or the cookie wouldn't be set, yet under these circumstances, this will work perfectly.
    echo "Cookie has been set.";
    setcookie("ApplicationUserRank", "new test", mktime (0, 0, 0, 1, 1, 9001));
}
else {
    echo "Cookie is set.";
}

// now it sends the buffer all at once.
ob_end_flush();
?>

相信塔瑞克的答案,并考虑到莱蒙所说的,尝试函数
ob\u start()
ob\u end\u flush()
可能会很有用。它们是输出缓冲区控制函数

例如:

<?php
// php starts collecting the buffer rather than just sending it all out.
ob_start();

if(!isset($_COOKIE["ApplicationUserRank"])) {
    // This should throw an error about headers already being sent or the cookie wouldn't be set, yet under these circumstances, this will work perfectly.
    echo "Cookie has been set.";
    setcookie("ApplicationUserRank", "new test", mktime (0, 0, 0, 1, 1, 9001));
}
else {
    echo "Cookie is set.";
}

// now it sends the buffer all at once.
ob_end_flush();
?>

setcookie()调用在哪里完成?请尝试使用:
$\u COOKIE
进行调试。确实没有任何关于“ApplicationUserRank”的信息?我只是猜测,但似乎您正在cookie中存储重要的用户数据,我建议您查看会话,这里有更多信息:。9001年是无效的Unix时间戳日期。setcookie()在哪里调用正在完成?请尝试使用:
$\u COOKIE
进行调试。关于“ApplicationUserRank”确实没有任何内容?我只是猜测,但似乎您正在cookie中存储重要的用户数据,我建议查看会话,这里有更多信息:。9001年是无效的Unix时间戳日期。如果PHP在调用ob_start()函数之前创建输出,调用setcookie()仍然会抛出“headers ready sent”错误。这看起来非常有用,从现在起我确实会使用它!然而,遗憾的是,它并没有解决这个问题:(啊,谢谢:)不幸的是,这也不起作用。我确实尝试过将它与ob_start和ob_end_flush结合使用。这里似乎有严重的问题。。。我知道它不可能是服务器配置,我有wordpress运行,它存储的cookies很好。好的,让我们看看。首先,我想假设您在发送任何输出之前设置了cookie(根据PHP的setcookie页面,这是必要的)。其次,您的cookie不再依赖mktime。我能想到的下一件事是路径和域变量,尝试相应地设置它们,检查。此外,请检查您的服务器配置。我感觉到一些奇怪的事情,萝莉:)谢谢你陪我度过这一切。我认为你是对的!我的配置可能有问题。我做了更多的测试:我发现,提交表单的过程似乎正在删除我设置的cookie!如果我手动导航到读取cookie的页面,而不经过表单过程,那么该网页最终可以访问cookie!我不明白为什么会这样——WordPress Cookie不会发生这种情况……如果PHP在调用ob_start()函数之前创建输出,调用setcookie()仍然会抛出“headers ready sent”错误。这看起来非常有用,从现在起我将使用它!然而,不幸的是,它并没有解决这个问题:(啊,谢谢你:)不幸的是,这也没有起作用