0

我正在尝试使用 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 秒。第三个参数是$expire,使用它...

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

$过期报价

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 回答