quys,我的PHP应用程序有问题。
我有两个页面用于登录和注册。两个页面都使用commoncookies类。一切正常,除了一件事:setcookie()只在/signin页上工作(cookie值进入数据库,cookie'rwt'出现)。
注册页上的cookie值将进入数据库,但setcookie()不起作用。
求求你,救命。
P.S.这是唯一的问题,所有东西都在本地主机上工作,但在生产域上不工作
P.P.S$DBH是PDO变量,包含正确的数据库信息。
登录页

$cookie = new Cookies($DBH);
 ........

if ($signin->remember=="yes") {
    $cookie->account_set($signin->user);
}

注册页
  $cookie = new Cookies($DBH);
   .........
   ........

if ($signup->check_availability()) {

    $signup->save();

    $cookie->account_set($signup->user);

    header("Location:/");

} else {
    $msgText = "This username already exists";
    echo "<div class=\"orangeMsg\">$msgText</div>";
}

班级cookies
 class Cookies
        {
            private $_DBH, $cookie_domain;
            function __construct(PDO $DBH)
            {
                $this->_DBH=$DBH;
                $this->cookie_domain=$_SERVER['HTTP_HOST'];

            }
            public function account_set($value)
            {
                $cookie_value=uniquestr();
                // function from common.func.php
                $this->_DBH->query("UPDATE accounts SET cookie='$cookie_value' WHERE user='$value'");
                setcookie('rwt', $cookie_value, time()+60*60*24*7 , '/', $this->cookie_domain);
            }
            public function account_unset($value)
            {
                if (isset($_COOKIE['rwt'])) {
                    $cookie_value=$_COOKIE['rwt'];
                    setcookie("rwt", $cookie_value, time()-2592000, '/', $this->cookie_domain);
                    $this->_DBH->query("UPDATE accounts SET cookie=DEFAULT WHERE user='$value'");
                }
            }
        }

最佳答案

我的经验是,设置cookie和发送HTTP回复(而不是200 OK)的组合很容易造成麻烦。可能很容易,您的方法可以在某些浏览器上使用,但不能在其他浏览器上使用。您可以通过在setcookie()之前使用header('Location ...')来提高这种工作的可能性(因为有些浏览器似乎在遇到Location头时停止解释头),但这仍然不能保证。
解决方法是使用一次性GET参数重定向到目标位置并在那里设置cookie。

10-07 17:31