【问题标题】:PHP Remember Me Cookie IssuePHP 记住我 Cookie 问题
【发布时间】:2015-01-14 19:29:54
【问题描述】:

我有一个带有记住我复选框的登录表单,它将用户电子邮件设置在一个 cookie 中,然后我想在他们下次登录时自动填写用户名。此外,当我使用 firbug 时,它会显示login.php 页面所在目录中的 cookie。 index.phplogin.php 目录不在同一目录中。

所以我有带有登录表单的index.php 页面。当用户提交表单时,它会调用login.php,其中包含以下代码:

if (isset($_POST['email'])) {
        if (isset($_POST['remember'])) {
            setcookie("email", $_POST['email'], time() + 9999999);
            $_COOKIE['email'] = $userEmail;
        }
    }

然后在index.php 代码上我有这个代码:

$userEmail = $_COOKIE['email'];

然后我使用$userEmail 变量自动填充用户名字段,如下所示:

<div class="form-group <?php if(isset($userEmail)) { echo $addClass; }?>" >
    <input type="email" name="email" id="email" class="form-control input-lg" placeholder="Email Address" value="<?php if(isset($userEmail)) { echo $userEmail; } ?>">
</div>

我可以看到正在设置 cookie,但是当我尝试回显 cookie(电子邮件地址)时,它什么也没显示。

我知道我可能没有以最好的方式做到这一点,但它曾经可以工作,现在它停止工作了。关于我做错了什么有什么建议吗?

编辑:当我使用 Firebug 时,我在 Cookies 选项卡中看到了这个:

  • 姓名:电子邮件
  • 值:电子邮件地址
  • 路径:这是与我当前所在页面不同的路径

当我var_dump($_COOKIE['email']) 它显示NULL

【问题讨论】:

  • 停止工作如何?输入了错误的电子邮件地址?没有电子邮件地址?完成任何基本调试,例如查看 cookie 是否设置?里面设置了什么值?
  • 对不起,我会更新我的问题,但是是的,它使用登录时输入的用户电子邮件地址设置 cookie。我可以看到 cookie 已设置,但它不显示电子邮件当我回显 cookie 时,输入字段中的地址。
  • 你为什么有$_COOKIE['email'] = $userEmail;?如果它做了任何事情,它就会用一个不存在的变量覆盖你的值。
  • @jeroen:那是因为 PHP 不会使用 setcookie() 中设置的任何内容自动更新 $_COOKIE
  • 啊是的。接得好。可能需要在更早的地方有一个$userEmail = $_POST['email']

标签: php cookies


【解决方案1】:
if (isset($_POST['email'])) {
        if (isset($_POST['remember'])) {
            setcookie("email", $_POST['email'], time() + 9999999);
            $_COOKIE['email'] = $userEmail;
        }
    }

查看$_COOKIE['email'] = $userEmail; 行,这应该是$userEmail = $_COOKIE['email'];,因为此时$userEmail 没有被赋予一个值,所以您实际上是将$_COOKIE['email'] 设置为一个空值。

或者你需要设置$_COOKIE['email'] = $_POST['email'];

【讨论】:

  • 对不起,这并没有改变任何东西
  • $_POST['email'] 设置为 null 或空字符串值,$userEmail 设置为 NULL 或空字符串 isset() 函数仅检查是否定义了相关变量在函数调用的范围内。如果你想检查空字符串。使用空($var)
  • 因此,当我从 login.php 删除重定向并在 login.php 页面中回显 cookie 时,它​​会回显电子邮件地址,但是一旦我在另一个页面上,它就不会回显 cookie
【解决方案2】:

我认为:

if(isset($userEmail))

应该是:

if(isset($userEmail) && !empty($userEmail) ) 

【讨论】:

    【解决方案3】:

    感谢所有答案,但此更改已解决此问题。它将 cookie 的路径设置为 login.php 页面所在的目录,所以我必须为所有目录设置 cookie 的路径。

    我改变了这个:

    if (isset($_POST['email'])) {
        if (isset($_POST['remember'])) {
            setcookie("email", $_POST['email'], time() + 9999999);
            $_COOKIE['email'] = $userEmail;
        }
    }
    

    到这里:

    if (isset($_POST['email'])) {
            if (isset($_POST['remember'])) {
                $userEmail = $_POST['email'];
                setcookie("email", $userEmail, time() + 9999999, "/");
            }
        } 
    

    我将"/" 添加到setcookie

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-05
      • 2011-03-22
      • 1970-01-01
      • 2017-06-04
      • 2013-01-03
      • 2012-07-10
      • 1970-01-01
      相关资源
      最近更新 更多