-1

我使用 PHP 制作的当前登录脚本正在运行,但是当我尝试登录并取消选中“记住我”时,它会登录,但没有设置所需的 cookie,但是,如果我选中记住框,它会登录并设置饼干。所以问题是,是什么导致它发生?我的 PHP 代码:

<?php
    /* Mysql data */
    $MysqlUsername = "root";
    $MysqlPassword = "";
    $MysqlHostname = "localhost";
    $MysqlDatabase = "teamgamersnet";
    $Salt = "TGN2012";
    $Username = $_POST['Username'];
    $Password = $_POST['Password'];
    $Remember = $_POST['Remember'];
    $Cookie = "TGN";
    $IP       = $_SERVER['REMOTE_ADDR'];
    if (empty($Username) || empty($Password)) { die("Please fill in all the fields"); }


    $hash = hash('sha256',strtolower($Username).$Password.$Salt);

    $Sql = new mysqli($MysqlHostname, $MysqlUsername, $MysqlPassword, $MysqlDatabase);
    if ($Sql->connect_error){ echo $Sql->connect_error; }
    $sUser = $Sql->real_escape_string($Username);
    $sPass = $Sql->real_escape_string($Password);
    $xPass = $Sql->real_escape_string($hash);


    $CheckUser = $Sql->query("SELECT * FROM `users` WHERE `Username` = '".$sUser."'");;
    if ($CheckUser->num_rows == 0) { header("Location: /?p=Login&wrongusr=true"); die(); }
    $xCheckUser = $CheckUser->fetch_array(MYSQLI_ASSOC);
    if ($xCheckUser['Activated'] == "false") { header("Location: /?p=Login&activate=true"); die(); }
    if(strtolower($Username) == strtolower($xCheckUser['Username'])) {
        if($hash == $xCheckUser['Password']) { // Check if password is correct
        if(isset($Remember)){ // Set a looong cooke to remember
                setcookie ($Cookie."User", htmlspecialchars($Username), time() + 99999999);
                setcookie ($Cookie."Pass", $hash, time() + 99999999);
                        header("Location: /?login=true");

        }
        else
        { // Set a standard cookie
                setcookie ($Cookie."User", htmlspecialchars($Username), time() + 3600);
                setcookie ($Cookie."Pass", $hash, time() + 3600);
                header("Location: /?login=true");
        }

    }

    else
    {
        header("Location: /?p=Login&wrongpwd=true"); // Send them to home page 
    }
    }
?>
4

2 回答 2

2

您的问题的答案不是由于 PHP 本身,而是(我认为)取决于您的网络服务器。关于 cookie 及其设置方式的一些信息: - 它们基于时间戳 - 更重要的是,服务器设置的时间戳!- 它们将根据所述时间戳自动过期。

我强烈建议仔细查看服务器发送的 HTTP 标头并检查到期日期,因为我无法在本地重现您的错误,但之前在生产中也有类似的情况。转到您的页面,取消选中记住我,然后检查服务器发送给您的标头。你会发现这样的东西: Set-Cookie:TGNPass= some hash ; expires=2012 年 11 月 17 日星期六 22:27:44 GMT

到期日期/时间是您所追求的。检查它是否符合您的预期(即从现在开始一小时),如果不是,您需要调整服务器的时区设置。这很容易使用http://php.net/manual/en/function.date-default-timezone-set.php完成。

于 2012-11-17T21:30:06.893 回答
0

http://php.net/manual/en/function.setcookie.php如果您的服务器时间与客户端时间不匹配,有时 time()+3600 会失败。我会尝试 time() + 7200 和 time() + 14400 并检查您的 cookie 以查看它们的实际设置。

于 2012-11-17T21:28:09.727 回答