Сижу битый час над одним и тем же вопросом.
Есть таблица user (в ней хранятся данные пользователя для аутентификации):
-- id -- login -- password --
И таблица session (в ней хранятся данные о человеке и ключи доступа к закрытым страницам):
-- id -- uid -- key -- token -- ip -- agent -- time --
---- Суть аутентификации:
Вводим логин и пароль, если все верно перекидываем на страницу авторизации, где тем временем происходит генерация ключей (key and token) доступа для id пользователя и записываются данные в бд: ip, agent, uid (id пользователя), time (текущее время авторизации), ну и сами ключи: key and token
---
Есть файл проверки кук: cookie.php, примерное содержимое:
session_name('blabla');
session_start();
ob_start();
// Если есть куки:
if(isset($_COOKIE['id']) and isset($_COOKIE['key']) and isset($_COOKIE['token'])) {
// Делаем запрос к таблице с пользователями:
$user = sql("SELECT * FROM user WHERE id = $_COOKIE['id']");
// Проверяем если есть пользователь
if(isset($user['id'])){
// Делаем запрос к таблице с сессиями
$session = sql("SELECT * FROM session WHERE uid = $user['id']");
// и теперь проверяем (И ВОТ ЗДЕСЬ КРОЕТСЯ ДЬЯВОЛ)
if($session['uid'] != $_COOKIE['id'] or $session['key'] != $_COOKIE['key'] or $session['token'] != $_COOKIE['token']){
// и если ни один из ключей не совпадает с теми что в базе, то мы сбросим все куки
setcookie('key', '', time()-86400*31, '/');
setcookie('token', '', time()-86400*31, '/');
setcookie('id', '', time()-86400*31, '/');
}
}}
Проблема в том, что при изменении кук процесс удаления кук не происходит и почему, я понять не могу. Помогите найти проблему.
PS: Не обращайте внимания на запросы, тут проблема с условиями, а какая именно я не не замечаю