首页 文章

PHP Cookies无效

提问于
浏览
0

我正在 Build 一个登录网站 . 我的会话工作正常但我需要能够让他们登录,如果点击记住我 . 目前我的登录脚本使用他们键入的用户名和密码将cookie保存到一些cookie . 我在脚本中设置了以下脚本$ username和$ password . $ _SESSION变量设置得很好 . 而且我知道脚本会进入if语句,因为在我放置一个警告框之前 .

的login.php

while($row = mysql_fetch_array($getLoginResults))
{
    $error = "Login Successful";
    $_SESSION['Username'] = $_POST['username'];
    $_SESSION['Password'] = $_POST['password'];
    if($keep == 1)
    {
        setcookie("Username", $username, time()+3600*24*30);
        setcookie("Password", $password, time()+3600*24*30);
    }
}

当我检查登录时,我有一个javascript警报,所以我知道cookie已设置,但警报框出现空白 .

check_login.php

echo "<script>alert('".$_COOKIE['Username']."')</script>";

我错过了什么?

4 回答

  • 0

    尝试使用带有指定路径的setcookie,这用于捕捉我,因为它默认采用当前路径 . 使用/将使cookie适用于整个域

    setcookie("Username", $username, time()+3600*24*30, '/');
    
  • 2

    您正在使用PHP编写脚本代码 . PHP只能知道随请求发送的数据 .

    如果您首先设置cookie然后从 $_COOKIE 获取数据,则数据尚未存在 . 首先,浏览器必须接受cookie,然后在下一个请求时将其发回 .

    如果你改用Javascript并从浏览器中获取文档cookie,它就可以了 .

    现在是免责声明

    永远不要将登录凭证(用户名和密码)作为纯文本存储在永久性cookie中!

    如果操作正确,则从加密安全随机数生成器创建一个长随机字符串(这意味着您不使用 rand()mt_rand() ),将其存储在cookie中,也存储在数据库中 . 在检查凭据时,此随机字符串现在是用户名和密码的替代品 .

  • 6

    似乎 $keep 来自无处 . 如果您使用 $keep 变量的复选框,则可以执行以下操作 .

    <?
    $keep = isset($_POST['keep']);
    if ($keep) {
        .... // cookie set up
    }
    ?>
    
  • 1

    最好使用Jquery / Javascript在浏览器中设置cookie . 我觉得jquery比PHP更容易 .

    Create, read, and erase cookies with jQuery

相关问题