Лучший способ разрешить аутентификацию на сайте с помощью cookie в PHP? - PullRequest
1 голос
/ 01 февраля 2010

Я знаю, что это основной вопрос, поэтому он должен быть основным ответом. Я всегда использовал систему входа в систему пользователей, используя только сеансы, и я хотел бы теперь сделать так, чтобы пользователь оставался в системе, когда он возвращается на мой сайт, если он решит использовать cookie-файлы. Я не уверен, что лучший способ сделать это, но у меня есть небольшой макет базовой функциональности, как я думаю, он может работать ниже. Пожалуйста, скажите мне, если это выглядит правильно или я должен делать это по-другому. Файл 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 ]

2 голосов
/ 09 февраля 2010

В прошлом я использовал настройку двух файлов cookie, один из которых хранит идентификатор пользователя, а другой содержит контрольную сумму, которая проверяет идентификатор пользователя. Вот пример:

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

Контрольная сумма - это соленый md5-хэш идентификатора пользователя, поэтому ее нельзя реверсировать или изменить для отражения другого идентификатора пользователя (в случае отсутствия контрольной суммы можно легко изменить файл cookie «идентификатор пользователя»).

Чтобы восстановить сеанс, вы просто проверяете файлы cookie и проверяете контрольную сумму (с той же «солью») по идентификатору пользователя:

//Restore stored user session
if (md5($_COOKIE["userid"]."F%^WD&*^(") == $_COOKIE["checksum"])
{
    //retrieve user again and store in session
}
1 голос
/ 01 февраля 2010

Вы на правильном пути; так работает большинство реализаций "помни меня".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...