创建Cookie

Mat*_*att 0 php

我正在尝试使用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.";
            }

?>
Run Code Online (Sandbox Code Playgroud)

检查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 {

    }
}

?>
Run Code Online (Sandbox Code Playgroud)

编辑

我需要为cookie添加一个过期参数!

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

Gla*_*vić 5

Cookie已创建,但您创建的时间为0秒.第三个参数是$ expire,使用它...

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

$ expire quote

Cookie过期的时间.这是一个Unix时间戳,因此是自纪元以来的秒数.换句话说,您很可能使用time()函数加上希望它到期之前的秒数来设置它.或者你可以使用mktime().time()+ 60*60*24*30会将cookie设置为30天后到期.如果设置为0或省略,则cookie将在会话结束时(浏览器关闭时)到期.