PHP setcookie()奇怪的行为

PHP setcookie()奇怪的行为,php,mysql,cookies,Php,Mysql,Cookies,奎斯,我的PHP应用程序有问题 我有2页用于登录和注册。两个页面都使用公共cookiesclass。一切正常,除了一件事:setcookie()只在/sign页面上工作(cookie值进入数据库,cookie“rwt”出现) 在注册页面上,cookie值进入数据库,但setcookie()不起作用 请帮忙 另外,这是唯一的问题,一切都可以在本地主机上运行,但不能在生产域上运行 p.p.S$DBH是PDO变量,它包含正确的数据库信息 登录页面 $cookie = new Cookies($DBH)

奎斯,我的PHP应用程序有问题

我有2页用于登录和注册。两个页面都使用公共
cookies
class。一切正常,除了一件事:
setcookie()
只在
/sign
页面上工作(cookie值进入数据库,cookie“rwt”出现)

在注册页面上,cookie值进入数据库,但
setcookie()
不起作用

请帮忙

另外,这是唯一的问题,一切都可以在本地主机上运行,但不能在生产域上运行

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>";
}
注册页面

$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>";
}
您应该始终在
标题('Location:…')
调用之后直接调用
exit
。否则,脚本将继续运行到最后,可能会导致一些意外的行为


我的猜测是,您稍后在注册脚本中以某种方式取消了cookie。

我的经验是,设置cookie和发送HTTP回复(而不是
200 OK
的组合很容易造成麻烦。您的方法可能很容易适用于某些浏览器,但不适用于其他浏览器。您可以通过在
标题('Location…')
之前使用
setcookie()
来提高这一工作的可能性(因为一些浏览器在遇到
位置
标题时似乎会停止解释标题),但这仍然不能保证

解决方法是使用一次性GET参数重定向到目标位置,并在那里设置cookie。

解决方案

这是我代码中的一个错误,它在本地服务器上工作真的很奇怪

错误解释

我有与注册过程相关的
if(){..}
if(){..}else{..}
逻辑块。那很愚蠢,但我以为他们是亲戚

将逻辑更改为
if(){..}elseif(){..}else{..}
解决了问题 问题


我为这样一个蹩脚的错误道歉。

它在本地虚拟域上工作得非常好,这就是为什么需要帮助的原因