2010-02-01 56 views
1

我知道这是一个基本问题,所以它应该是一个基本的答案。我一直只使用会话完成用户登录系统,现在我想让它成为用户选择使用cookie时返回到我的网站时保持登录的选项。我不确定这样做的最佳方法,但我有一个小样本的基本功能,我认为它可能在下面工作。请告诉我,如果这看起来是正确的,或者我应该做的不同。 cookie将最有可能持有的用户ID和将被重新生成每次他们“登录”允许从PHP中的cookie验证站点的最佳方式是什么?

// 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

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

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

校验和是用户ID的盐化MD5哈希,所以它不能被逆向工程改造或改变,以反映另一个用户标识(在没有校验的情况下,人们可以很容易地改变“的userid ' 曲奇饼)。

要恢复会话,你刚才检查的饼干和验证校验和(使用相同的“盐”)反对的userid:

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

你是在正确的轨道上的一些加密的密钥;这是大多数“记住我”实现工作的方式。

相关问题