允许从PHP中的cookie进行身份验证的最佳方法?

时间:2010-02-01 16:11:36

标签: php authentication cookies

我知道这是一个基本问题所以它应该是一个基本答案。我一直只使用会话来完成用户登录系统,我现在想让用户在他们选择使用cookie时返回我的网站时保持登录状态。我不确定这样做的最好方法,但我有一个基本功能的小模型,我认为它可能在下面工作。请告诉我,这看起来是正确的还是我应该采用不同的方式。 cookie很可能包含用户ID和一些加密密钥,每次“登录”时都会重新生成

// see if Session is set
if (!isset($_SESSION['userID']) || $_SESSION['userID'] == ''){

    // session is not set so see if cookie is set
    if (isset($_COOKIE['userID'])){
        //cookie is set so check that it is valid login ID and key
        // if it returns tru then we will also initiate there session value so they will be logged in
    }else{
        // redirect to login page
    }

    if (!isset($_SESSION['userID']) || $_SESSION['userID'] == ''){
        // redirect to login page
    }

}else{
    //user is logged in already
}

2 个答案:

答案 0 :(得分:2)

我过去使用的是设置两个cookie,一个存储用户ID,另一个包含验证用户ID的校验和。这是一个例子:

//store website user id
setcookie('userid', $userid, time() + 2592000, "/");
//store checksum
setcookie('checksum', md5($userid."F%^WD&*^("), time() + 2592000, "/");

校验和是用户标识的盐渍md5-hash,因此无法对其进行反向设计或更改以反映另一个用户标识(如果没有校验和,则可以轻松更改'userid'cookie)。

要恢复会话,您只需检查cookie并验证校验和(使用相同的'salt')对用户ID:

//Restore stored user session
if (md5($_COOKIE["userid"]."F%^WD&*^(") == $_COOKIE["checksum"])
{
    //retrieve user again and store in session
}

答案 1 :(得分:1)

你走在正确的轨道上;这就是大多数“记住我”实现的工作方式。