简体   繁体   中英

Setting a cookie for user to stay logged in

so, I am struggling for 1 week now on this PHP code and still can't get it working. I need a cookie to be set for a user for 1 year, and also when he close his browser and visit our site again later, not to have to log in again. If someone can write the code as it should be set on my file I would be very grateful. My original code is bellow, it's from my config.php file. Many thanks in advance!

function create_slrememberme() {
        $key = md5(uniqid(rand(), true));
        global $conn;
        $sql="update members set remember_me_time='".date('Y-m-d H:i:s')."', remember_me_key='".$key."' WHERE username='".mysql_real_escape_string($_SESSION[USERNAME])."'";
        $conn->execute($sql);
        setcookie('slrememberme', gzcompress(serialize(array($_SESSION[USERNAME], $key)), 9), time()+60*60*24*30);
}

function destroy_slrememberme($username) {
        if (strlen($username) > 0) {
                global $conn;
                $sql="update members set remember_me_time=NULL, remember_me_key=NULL WHERE username='".mysql_real_escape_string($username)."'";
                $conn->execute($sql);
        }
        setcookie ("slrememberme", "", time() - 3600);
}

if (!isset($_SESSION["USERNAME"]) && isset($_COOKIE['slrememberme'])) 
{
        $sql="update members set remember_me_time=NULL and remember_me_key=NULL WHERE remember_me_time<'".date('Y-m-d H:i:s', mktime(0, 0, 0, date("m")-1, date("d"),   date("Y")))."'";
        $conn->execute($sql);
        list($username, $key) = @unserialize(gzuncompress(stripslashes($_COOKIE['slrememberme'])));
        if (strlen($username) > 0 && strlen($key) > 0)
        {
            $sql="SELECT status,USERID,email,username,verified from members WHERE username='".mysql_real_escape_string($username)."' and remember_me_key='".mysql_real_escape_string($key)."'";
            $rs=$conn->execute($sql);
            if($rs->recordcount()<1)
            {
                $error = "Error: Could not locate your account.";
            }
            elseif($rs->fields['status'] == "0")
            {
                $error = "Error: Your account has been disabled by the administrator.";
            }
            if($error=="")
            {               
                $_SESSION['USERID']=$rs->fields['USERID'];
                $_SESSION['EMAIL']=$rs->fields['email'];
                $_SESSION['USERNAME']=$rs->fields['username'];
                $_SESSION['VERIFIED']=$rs->fields['verified'];
                create_slrememberme();
            }
            else
            {
                destroy_slrememberme($username);
            }
        }
}

This line:-

setcookie ("slrememberme", "", time() - 3600);

is setting your cookie to expire in the past, ie it is already expired!

To set it for a year you need to do:-

setcookie("slrememberme", "", time()+60*60*24*30*365);

will set it for approximately 1 year.

See the manual for more details.

Also, this line:-

if (!isset($_SESSION["USERNAME"]) && isset($_COOKIE['slrememberme']))

Should be:-

if (isset($_SESSION["USERNAME"]) && isset($_COOKIE['slrememberme']))

You probably need to set the cookie-expiry function located in your php.ini file named session.cookie_lifetime . You should set it to be 31536000, this will make it expire after 1 year, it is probably set to 0.

setcookie('usuario-logado', 'true', (time() + ( 24 * 3600)));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM