【问题标题】:Why PHP Cookie variable is not saved after closing Chrome为什么关闭 Chrome 后没有保存 PHP Cookie 变量
【发布时间】:2018-11-17 20:25:27
【问题描述】:

我正在学习在 PHP 中使用 cookie。我期待每次设置 cookie 时,cookie 和他的所有变量都存储在客户端站点上,以便下次用户访问该站点时我可以再次使用它们。无论如何,在下一个示例中(一个带有登录选项的 Web 应用程序,我使用 cookie 来存储一个唯一的字符串,因此我可以实现“记住我”选项)我可以访问存储的 cookie 的 id,但变量数据似乎丢失了。这是我使用的代码示例和我得到的截图。

设置 Cookie

 if (isset($_POST['remember_me'])) {
    $token=uniqid($_SESSION['id']);
    $sql="UPDATE users SET token='$token' WHERE id='".$_SESSION['id']."'";
    $conn->query($sql);   
    setcookie("remember_me", $token, time()+30*24*60*60*1000);
}
else{
    setcookie("remember_me","",time()-1000);
} 

用户页面

在用户页面上,它只是简单地打印出 $_COOKIE 和 $_SESSION 数组。

<?php 
    echo "SESSION: ";
    print_r($_SESSION);
?>
<br>
<?php
    echo "COOKIE: ";
    print_r($_COOKIE);
?>

流程:

我做错了什么,为什么重新打开后的cookies数组是空的?

编辑:

我第二次打开浏览器时,设置 cookie 的脚本没有执行。我只是将 url 设置为转到 user-page.php 。
示例: /localhost/MIAFormApp/script/db/HTML_PROBA/user-page.html.php

【问题讨论】:

  • 我认为这是问题if (isset($_POST['remember_me'])) {当它为假时,它正在过期。

标签: php cookies setcookie


【解决方案1】:

尝试删除示例代码中的 else 语句 - 意思是从:

这个

if (isset($_POST['remember_me'])) {
    $token=uniqid($_SESSION['id']);
    $sql="UPDATE users SET token='$token' WHERE id='".$_SESSION['id']."'";
    $conn->query($sql);   
    setcookie("remember_me", $token, time()+30*24*60*60*1000);
}
else{
    setcookie("remember_me","",time()-1000);
} 

到此

if (isset($_POST['remember_me'])) {
    $token=uniqid($_SESSION['id']);
    $sql="UPDATE users SET token='$token' WHERE id='".$_SESSION['id']."'";
    $conn->query($sql);   
    setcookie("remember_me", $token, time()+30*24*60*60*1000);
}

当您重新打开浏览器时,if 语句将检查是否找到了 POST 变量 remember_me。唯一能找到它的时间是当有人登录时,因为登录表单在表单提交时发送了该信息。在所有其他情况下(例如重新打开浏览器),else 语句将被执行,这不是您想要的。原因是在 cookie 上设置一个空值会delete said cookie.

【讨论】:

  • 实际上,我第二次打开浏览器时并没有执行该脚本。我将 url 设置为直接显示到用户页面
  • @NVelichkovski 啊!明白了。您是否尝试过检查您的浏览器是否配置为在浏览器关闭时删除 cookie 数据? (据我所知,这是所有主要浏览器的一个选项)。我测试了您的示例代码,当我重新打开浏览器时能够看到 cookie,这表明问题可能与您的代码无关。
猜你喜欢
  • 2013-04-13
  • 1970-01-01
  • 1970-01-01
  • 2022-11-06
  • 2013-09-27
  • 1970-01-01
  • 1970-01-01
  • 2021-02-03
  • 2019-11-21
相关资源
最近更新 更多