0

Webサイトでのログインの永続性を維持するためにCookieを使用しようとしています。しかし、なんらかの理由で私にはわかりませんが、Cookieは作成されていません。セッションのみが作成されています。ログインしたユーザーを追跡するためにSessionsを使用し、戻ってきたときにセッションを再作成するためにCookieを使用しています。私は何が間違っているのですか?

セッションとCookieを作成します。

<?php

$connect= // connect variables

    $query= "SELECT * FROM users where email= '$email' AND password=    
'$password'";
    $result= mysqli_query($connect, $query)
        or die('error with query');
        if (mysqli_num_rows($result) == 1) {
            $row= mysqli_fetch_array($result);
            session_start();
            $_SESSION['id']= $row['user_id'];
            $_SESSION['name']= $row['fname'] . " " . $row['lname'];
            setcookie('id', $row['user_id']);
            $profile_url= 'http://'. $_SERVER['HTTP_HOST'] . 
dirname($_SERVER['PHP_SELF']) . '/profile.php';
            header('Location:profile.php');     
            }
        else {
            $message= "Incorrect email/password combination.";
            }

?>

セッションを復元するためのCookieを確認します。

<?php

session_start()
/* if a session does not exist, see if a cookie does to set the session */
if (!isset($_SESSION['id'])) {
    if (isset($_COOKIE['id'])) {
        $_SESSION['id'] = $_COOKIE['id'];
    }
    else {

    }
}

?>

編集

Cookieに有効期限パラメータを追加する必要がありました。

setcookie('id', $row['user_id'],time()+86400);
Note: The above example sets the cookie for 1 day
4

3 に答える 3

5

Cookieが作成されますが、0秒間作成します。3番目のパラメータは$expireです、それを使用してください...

http://php.net/manual/en/function.setcookie.php

$expire見積もり

Cookieの有効期限が切れる時間。これはUnixタイムスタンプであるため、エポックからの秒数です。つまり、time()関数に、有効期限が切れるまでの秒数を加えて設定する可能性があります。または、mktime()を使用することもできます。time()+ 60 * 60 * 24 * 30は、Cookieが30日で期限切れになるように設定します。0に設定するか省略した場合、Cookieはセッションの終了時(ブラウザが閉じたとき)に期限切れになります。

于 2013-01-15T23:33:22.233 に答える
3

ここでいくつか不足しているもの(有効期限、パス、ドメイン):

setcookie('id', $row['user_id'],time()+86400,"/",".your_domain.com");

注:上記の例では、ドメイン「your_domain.com」のドメインのルートに1日間Cookieを設定します。これでたくさんのドメインになりました!

于 2013-01-15T23:33:35.687 に答える
2

Cookieに有効期限を追加する必要がありました。

setcookie('id', $row['user_id'],time()+86400);
于 2013-01-15T23:36:31.740 に答える