-1

PHPで作成した現在のログインスクリプトは機能していますが、ログインして[Remember me]のチェックを外そうとするとログインしますが、必要なCookieが設定されません。ただし、[Remember]ボックスをオンにすると、ログインして設定されます。クッキー。だから問題は、それが起こった原因は何ですか?私の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自体によるものではなく、(私が思うに)Webサーバーによるものです。Cookieとその設定方法に関する情報:-タイムスタンプに基づいています-さらに重要なのは、サーバーによって設定されたタイムスタンプです。-上記のタイムスタンプに基づいて自動的に期限切れになります。

サーバーから送信されているHTTPヘッダーを注意深く調べ、有効期限を確認することを強くお勧めします。これは、バグをローカルで再現できなかったためですが、以前は本番環境で同様でした。あなたのページに行き、私を覚えているのチェックを外し、サーバーからあなたに送られたヘッダーをチェックしてください。次のようなものが見つかります。Set-Cookie:TGNPass = some hash ; 有効期限=2012年11月17日土曜日22:27:44GMT

有効期限はあなたが求めているものです。それが期待どおりであることを確認し(つまり、今から1時間後)、そうでない場合は、サーバーのタイムゾーン設定を調整する必要があります。これは、 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 に答える