如何设置除会话之外的cookie

时间:2016-05-07 17:37:49

标签: php session cookies

我正在运行一个登录脚本,它使用user_id设置一个会话,并且它完美无缺。但是我还想设置一个cookie,如果用户选中了记住我的复选框,我为其分配了一个变量$remember = $_POST['remember'];,但cookie没有设置。如果我检查记住我的框,它只会启动会话,但是当我退出浏览器并返回时,我必须再次登录,这表明cookie未设置。现在,我使用user_id存储了会话,并使用user_name存储了Cookie。我不认为html部分是相关的,我的登录验证来自数据库,因为它们工作正常并且所有变量都已分配,所以这里是设置会话和cookie的代码:

        if($password == $pass_word){
            session_start();
            $_SESSION['user_id'] = $user_id;
            if($remember == "on"){
                setcookie("user_name", $user_name, time()+2592000);
            }               
        }

这是我的loggedin()功能:

function loggedin(){
    if((isset($_SESSION['user_id'])) || ((isset($_COOKIE['user_name'])) && (isset($_SESSION['user_id'])))){
        return true;
    } else {
        return false;
    }
}

但它只设置没有cookie的会话。请问我出错了什么。

1 个答案:

答案 0 :(得分:0)

我修好了。 cookie已设置,但如果浏览器已关闭,我必须重新启动session,这是我的解决方案

// db connection here
function loggedin(){
    if(isset($_SESSION['user_id']){
        return true;
    } else if(isset($_COOKIE['user_name']){
        $query = mysqli_query($con, "SELECT id FROM users WHERE user_name='". $_COOKIE['user_name']."'");
        $sql = mysqli_fetch_array($query);
        $_SESSION['user_id'] = $sql['id'];
        return true;
    } else {
        return false;
    }
}