итог такого захода: За Васю сидят с разных мест, а Вася даже не подозревает об этом...
что будет в этой статье: Здесь я расскажу как сделать так что бы когда за Васю заходят 2 человека (то есть авторизирутся под его логином и паролем) тот кто был раньше вылетал из сессии...
Пути достижения: При авторизации создаётся кука, и каждый раз когда Вася переходит с одной страницы сайта на другую эта кука меняется (естественно только в том случае если у пользователя включена эта функция);
ну а теперь самое главное код(хотя идея наверно важнее ):
предпологается что раз у вас есть пользователи значит у вас настроено ЧПУ допустим все запросы обрабатывает файл index.php, к которуму уже подключен коннект к базе данных. Форма авторизации находится в login.php, куки хранятся в таблице coocie: id(int), login(id), name(warchar), date(int), life(int)
поясняю:
login - id пользователя
name - уникальный идентификатор coocie
date - время создания куки из функции time()
life - время жизни куки(в секундах)
Так же есть таблица с пользователями пусть будет users: id, login(warchar), password(warchar), sess(int)
поясняю:
sess - это наша функция (соотвественно 1 - включено, 0 - выключено)
остальное думаю очевидно
ах да чуть не забыл база данных называется EXAMPLE
И так все запросы вашего сайта перенаправляются в файл index.php там мы добавляем (напрямую или include) вот такой код:
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- <?
- if((preg_match('#^[0-9a-zA-Zа-яА-я]{3,25}$#', $_POST['login']))and(preg_match('#^[0-9a-zA-Z]{3,25}$#', $_POST['password']))){ # проверка логина и пароля на соответсвие(можете менять под себя)
- $zapros = 'SELECT id, sess FROM `users` WHERE login =\''.$_POST['login'].'\' and password=\''.$_POST['password'].'\';'; # запрос в таблицу users на соответствие логина и пароля
- $login_id = $row['id']; # извлекаем id из предыдущего запроса
- }
- $zapros = 'DELETE FROM `EXAMPLE`.`coocie` WHERE `coocie`.`login` = \''.$login_id.'\';'; # удаляем старые записи
- $life = 60; # определяем время жизни куки в секундах (в данном случае 60 секунд)
- $zapros = 'INSERT INTO `EXAMPLE`.`coocie` (`id` ,`login` ,`name` ,`date` ,`life`) VALUES (NULL, \''.$login_id.'\', \''.$random_value.'\', \''.time().'\', \''.$life.'\');'; # образуем в таблице coocie нашу строку с авторизацией
- $autorization = true;
- }
- }else{
- $main = 'Неверный логин или пароль';
- $autorization = false;
- }
- }elseif(isset($_COOKIE['session_coocie'])){ # если пост данных не поступило значит проверяем есть ли у пользователя куки-данные
- $zapros = 'SELECT login, date, life FROM `coocie` WHERE name=\''.$_COOKIE['session_coocie'].'\';'; # если они есть сравниваем их с данными в нашей бд
- $login_id = $row['login'];
- $date = $row['date'];
- $life = $row['life'];
- }
- $zapros = 'SELECT sess FROM `users` WHERE id =\''.$login_id.'\';'; # запрос в таблицу users получающий данные о настройках сессии
- $sess = $row['sess']; # извлекаем настройки пользователя
- }
- }
- if($sess){ # проверяем включен ли параметр
- $life = 60; # определяем для неё жизнь
- $zap = 'UPDATE `EXAMPLE`.`coocie` SET `name` = \''.$random_value.'\', `date` = \''.time().'\', `life` = \''.$life.'\' WHERE `coocie`.`login` =\''.$login_id.'\';'; # Запрос на обновление данных о сессии
- }
- $autorization = true;
- }
- }else{ # если время жизни истекло раньше
- $autorization = false;
- $main = 'Пожалуйста авторизируйтесь снова!';
- }
- }else{ # если не было найдено не пост не куки данных
- $autorization = false;
- }
- ?>