Cookie没有设置,但我允许使用Cookie

时间:2011-02-24 11:09:11

标签: php

我正在尝试Post-Redirect-Get模式。

以下是我的自定义功能

<?php
function ReadCookieMessage()
{
    if (($_COOKIE["c"]) && ($_COOKIE["t"]))
    {
        $message = $_COOKIE["t"];
        $message = htmlspecialchars($message);
        if ($_COOKIE["c"] == "r")
        {
            $cssclass = 'error_msg';
        }
        else if ($_COOKIE["c"] == "g")
        {
            $cssclass = 'success_msg';
        }
        setcookie("c", "", time()-3600);
        setcookie("t", "", time()-3600);
        return '<div class="' . $cssclass . '">' . $message .'</div>';
    }
}
?>
<?php
function SetCookieMessage($c,$t)
{
    setcookie("c",$c, time()+3600);
    setcookie("t",$t, time()+3600);
}
?>

我在更改密码页面上SetCookieMessage("g","Your password has been changed, you may now login again");

然后我做

  

echo ReadCookieMessage();

在我的登录页面上。我不确定是什么setcookie工作时我设置r cookie,如果他们检查时记得他们登录。我也累了

setcookie("c","g", time()+3600);
setcookie("t","Your password has been changed, you may now login again", time()+3600);

取代SetCookieMessage功能。

不确定是否

if ($SqlChangePass)
                {
                    session_unset();
                    session_destroy();
                    setcookie("r", "", time()-3600);
                    SetCookieMessage("g","Your password has been changed, you may now login again");
                    header("Location: /login");
                }

对您有所帮助。它在changepassword脚本中。

Php没有给我任何错误。这些函数的目标是设置消息颜色(r表示红色,g表示绿色)和文本。然后将它们带到另一页并阅读该消息。它所访问的页面没有显示任何类型的消息。

2 个答案:

答案 0 :(得分:0)

所以,如果我做得对,你执行如下:

<?php
SetCookieMessage("something","here");
ReadCookieMessage();
?>

如果是这种情况,那将是正常行为。 Cookie与页眉中的结果页一起发送。 因此,您只能在下次请求时阅读Cookie。

e.g。第一次请求:

  1. 做事
  2. 放置Cookie
  3. 返回结果页
  4. 第二个请求可能是:

    1. 做事
    2. 阅读Cookie
    3. 返回结果页
    4. 您可以在维基百科上阅读有关Cookie的更多信息:Wikipedia page about HTTP Cookies 我引用:

        

      将cookie作为HTTP响应标题中的字段由Web服务器发送到Web浏览器,然后每次访问该服务器时由浏览器保持不变地发送。

      我希望我能正确理解你的问题。我的回答很有帮助。

答案 1 :(得分:0)

“我把SetCookieMessage(”g“,”您的密码已更改,您现在可以再次登录“);在测试页面上回显ReadCookieMessage();”

正如巴特所说,你不能设置一个cookie并在同一页面上检查它。

“如果我加载页面,我什么也看不见。如果我再次刷新页面,我会看到一条消息。如果我再次刷新,我看不到消息”

关于你的情况,这就是发生的事情:

  • 您设置了Cookie,它们已正确设置。设置cookie后,您尝试检查它,但脚本将无法看到它,因为它在启动时未设置
  • 您重新加载页面,脚本现在可以读取cookie并显示您的消息。但是在您的代码中,当您将其设置为过去(-3600)时,您告诉浏览器将ReadCookieMessage()上的cookie过期。
  • 您重新加载页面,然后重新设置Cookie,它会重新开始,因为之前的Cookie现在已经取消设置。

检查Bart提供的链接! :)