2

ログイン情報を記憶するために Cookie を使用しようとしましたが、Cookie は決して「取る」ようには見えませんでした。最初のログイン スクリプトは次のとおりです。

//try to login using cookies, but first make sure it doesn't have a $_SESSION variable for it
if (!(isset($_SESSION['valid_user']))) {
    if (isset($_COOKIE["login"])) {
        //try to login using cookie
        $query = "select from cookie_users where uniqueid = '".$_COOKIE["login"]."')";
        $conn = new mysqli('localhost', 'user', 'password', 'test');
        $result = $conn->query($query);
        if ($result->num_rows>0) {
            $result->fetch_assoc();
            $result['username'] = $username;
            $result['password'] = $password;
            //try to login using password and username from cookie database
            $query = "select * from authorized_users where username = '".$username."' and password = '".$password."'";
            $result2 = $conn->query($query);
            if ($result->num_rows>0) {
                $_SESSION['valid_user'] = $username;
            }
        }
    }
}

if (isset($_POST['userid']) && isset($_POST['password'])) {
    // if the user has just tried to log in
    $userid = $_POST['userid'];
    $password = $_POST['password'];

    $db_conn=new mysqli('localhost', 'user', 'password', 'test');

    if (mysqli_connect_errno()) {
        echo 'Connection to database failed: '.mysqli_connect_errno();
        exit;
    }
    $query = 'select * from authorized_users '."where name='$userid' "."and password=sha1('$password')";

    $result = $db_conn->query($query);
    if ($result->num_rows > 0) {
        //if they are in the database, register the user id
        $_SESSION['valid_user'] = $userid;
        //set up cookie
        setcookie("login", $uniqueid, time()*60*60*24*14);
        $query = "insert into cookie_users values ('".$userid."', sha1('".$password."'), '".$uniqueid."')";
        $result = $db_conn->query($query);
        if (!$result) {
            echo 'Could not update cookie in database';
        }
    }
    $db_conn->close();
}

会員限定コンテンツ:

if (isset($_SESSION['valid_user'] {
echo "members only content goes here";
} else {
echo "you need to login"; }

セッションとログイン スクリプトは問題なく動作します。ログイン ページを使用して直接ログインすると、それが表示されます。ユーザーが別のページに移動してから戻ってきた場合でも、それは機能します。そのため、セッションは問題なく機能すると私は信じています。ただし、ブラウザを閉じて戻ってくると、登録されません。スクリプトに問題がある場合は、お知らせください。いずれにせよ、私はテスト スクリプトを作成しましたが、それでも機能しません。ここにあります:

<?php

setcookie("test", "the test is good", time()*60*60);

?>

<html>
<body>
<?php
echo $_COOKIE["test"];
?>
</body>
</html>

だから私は根本的な何かが欠けていると思います。答えが非常に明白である場合は申し訳ありませんが、Cookie は私にとって初めてのことです。皆さんが与えることができるどんな助けにも感謝します.

4

1 に答える 1

3

あなたの問題はこの行にあります:

setcookie("login", $uniqueid, time()*60*60*24*14);

ここでは、時間を加算するのではなく、時間を掛けています。サイズを超える のに十分な量を掛けました(Y2038を参照)。何らかの理由で、Apache (少なくとも私のシステムでは) はそのヘッダーを無視し、ブラウザーはセッションの間だけヘッダーを保持します。幸いなことに、問題はかなり簡単に修正できます。MAX_INT

setcookie("login", $uniqueid, time() + 60*60*24*14); // Adding two weeks, not multipying by >9000
于 2012-08-27T14:23:29.723 に答える