在PHP中进行会话超时和持久登录的最佳实践

时间:2011-11-27 13:22:50

标签: php ajax session cookies autologin

我在我的网站上有持续登录,因此如果用户在登录过程中检查“记住我”,请设置cookie以使用户在该浏览器中始终保持活动状态。

有两条路径可以访问任何页面..如果它不是ajax请求,请求通过index.php,但如果请求是ajax,则只需要通过ajax.php。

首先处理用户请求我检查会话是否存储用户ID,如果会话持有用户没有问题,请求将完成。 但是如果会话中没有当前的用户ID,我检查了cookie以获取自动登录,如果我可以通过cookie登录用户,强制使用cookie数据自动登录,并在用户不做任何事情时使用userid设置Session ..

现在要处理它,我在index.php和ajax.php的顶部执行相同的过程,就像这样;

class SessionManager
{
    private function __construct()
    { ; }

    public static function getSessionUser()
    {
        $user = NULL;

        if(isset($_SESSION['user']))
            $user   = $_SESSION['user'];
        else
        {


 /* Get username from cookie, and login it and set Session with user if it's possible otherwise do nothing Session is empty */
            getUserFromCookie();
            if(isset($_SESSION['user']))
                $user   = $_SESSION['user'];
        }

        return $user;
    }
}

在index.php;

$user = SessionManager::getSessionUser();

if(!isset($user))
{
   include dirname(__FILE__)."/controllers/login_controller.php";
}

和ajax.php;

$user = SessionManager::getSessionUser();

if(!isset($user))
{
   echo json_encode(array("error" => true, "type" => NOT_ALLOWED, "message" => "User should login"));
}

所以它适用于所有情况(我猜:)),但我想知道什么是处理它的最佳做法?还有其他想法吗?

1 个答案:

答案 0 :(得分:2)

以下是如何使用PHP创建持久登录的一个示例,其中数据库与cookie结合使用,以验证cookie是否可信:

http://jeremycook.ca/2010/03/28/creating-a-persistent-login-mechanism/