Куки и работа на разных PC.

Предложение в следующем, сделать что-нибудь с куками, чтоб они поддерживали пользователя на разных PC. Например, если я авторизован на форуме на каком-либо, то я и дома и на работе спокойно захожу на страничку и всё нормально. На LS же, если я захожу с другого компьютера, то старая сессия автоматом закрывается и каждый раз приходится авторизироваться заново. Т.е. зашёл дома, ввёл логин/пасс, пришёл на работу, опять сессия отвалилась и приходится вводить логин и пасс.

42 комментария

avatar
Подтверждаю.
Сам сегодня заходил с ноута и приходилось снова вводить логин и пасс… Немного неприятно, но не критично…
  • Mmka
  • 0
avatar
Сессии хранятся в базе — генерация уникального ключа на основе IP, браузера. Проверка куков с генернированным ключом сессии в браузере. Если IP или браузер или ключ открытой сессии не совпадают — выкидывает.
avatar
не нужно сочинять
нет проверки ни на IP, ни на браузер. Просто при авторизации(ввод логина и пароля) ключ сессии перегенерируется и соответственно на прошлом компьютере он перестает работать.
Есть два варианта:
1. посмотреть ключ на одном компе и прописать его на другом, тогда не будет просить авторизацию в течении недели
2. заменить в User.class.php
$sKey=md5(func_generator().time().$oUser->getLogin());
на
$sKey=md5($oUser->getLogin().'_'.$oUser->getPassword());
avatar
Вопрос собственно не в том был, как сделать, а в том, «может быть стоит сделать в новой версии новый вариант сессии для большего удобства пользователям?» или это только мне кажется более удобным?
P.S. За способ решения проблемы спасибо.
avatar
это сделано в целях безопасности, при краже куков достаточно будет перезалогиниться и злоумышленник в пролете
avatar
А если бы куки привязывались к подсети, вообще отлично было бы
avatar
Хм, три года на этот сарказм никто не ответил.

Правильно ли я понимаю, что это фиксаться в официальной ветке git не будет?
avatar
Почти так как я сказал.
avatar
Пардон за банальный вопрос, но как сделать, чтобы не приходилось перелогиниваться при входе на mysite.ru и www.mysite.ru?
avatar
в конфиге хост куков сделать '.mysite.ru'
avatar
Опередил :)
avatar
Прописать в /config/config.php;

define('SYS_COOKIE_HOST','.mysite.ru'); // хост для установки куков. Обязательно с точкой.
avatar
спасибо большое!
avatar
а прописать в любом месте config.php?
avatar
А там есть уже define('SYS_COOKIE_HOST', null);.
Найдите и измените, вторую константу с тем же именем объявлять совершенно не нужно.
avatar
Да я уже разобрался спасибо!
avatar
Опять вопрос, теперь со входом на сайт с www и без всё нормально так вот при каждом заходе при изменении ip сбрасываются куки что делать?
avatar
Можно поподробней, куда прописать нужно define('SYS_COOKIE_HOST','.mysite.ru'); // хост для установки куков. Обязательно с точкой.

У меня LS 0.4.2

Вот кусок из моего cnfig.php

* Настройки куков
*/
$config['sys']['cookie']['host'] = null; // хост для установки куков
$config['sys']['cookie']['path'] = '/'; // путь для установки куков
avatar
$config['sys']['cookie']['host'] = '.mysite.ru';
avatar
Спасибо, но все равно не могу залогиниться на сайте, если url начинается с www....
avatar
Попробуйте сбросить куки в браузере.
avatar
Не получается — пробовал и кэш сбрасывал через админку…
avatar
Какое-то странное решение. Стоит один раз узнать ключ и пиши пропало.

Не проще ли просто разрешить совпадение по нескольких ключам?
avatar
4 года мы жили без вас… )
avatar
Это не значит, что жили правильно. Авторизация только на одном браузере — тупизм.
avatar
1. Несколько активных сессий
2. При создании новой сессии, если количество сессий достигает 6, трем последнюю.
3. Возможность удалить сессии пользователем

Так не будет слишком большого количество записей в бд и в случае проблем у пользователя с потерей данных аутентификации можно будет их почистить.

а-ля вк:
avatar
Так это уже есть или надо что-то дополнительно делать, чтобы оно так работало?
avatar
Просто описал механизм, как я это делаю в своих проектах, не на ls, а то бы уже закоммитил.
avatar
Понял.
avatar
Зачем плодить сессии, если можно добавить поле с массивом кук.
avatar
Как угодно, но если вы будете отображать информацию пользователю об активных сессиях нужно бы хранить информацию об их владельцах, разве нет?
Сделать можно как душе угодно, я описал свой механизм и не вижу в нем недостатков на данный момент.
avatar
Можно хранить массив в виде: время_последнего_визита, кука, устройство. Одно поле в бд на сессию против нескольких файлов на одного человека. Утроение сессий не очень хорошо.
avatar
Ну да можно сериализовать.
avatar
Но опять же как вы будете находить запись в бд?
avatar
В таблицу session добавляется поле с вышеуказанным сериализованным массивом. При логине новая гостевая сессия удаляется, по логину ищется существующая старая сессия, десериализуется массив все обновляется и продляется.
avatar
Т.е на всех браузерах одна кука?
avatar
array(
array('time' => время, 'cookie' => кука1, 'device' => планшет1),
array('time' => время, 'cookie' => кука2, 'device' => планшет1),
array('time' => время, 'cookie' => кука3, 'device' => комп1));

Можно обойтись без device. Один браузер — одна кука. Хоть со 100 браузеров логинься заходи.
avatar
Тогда еще раз повторюсь как вы будете находить запись в бд?
В каждом браузере через которой залогинился пользователь стоит кука значением которой является ключ по которому ищется запись в бд.
В случае с одной записью получается одинаковое значение ключа куки во всех браузерах.
avatar
Это уже мелочи реализации. Главное, сам принцип — не плодить лишние сессии.
По user_id, так как 2-х сессий с одним user_id. Кука может быть, например, хэшем сессии + id записи в массиве.
avatar
Я не понимаю мы хотим обезопасить пользователя или выкинуть все карты.

Одна кука на всех браузерах это не мелочи. Авторизировавшись по ней мы можем просто выйти и сама запись о сессии в бд удалиться, в итоге никто так и не узнает кто и когда у нас побывал. А с подстановкой id мы сможем проворачивать тоже самое выбирая какую сессию нам закрыть, но написав 0 мы точно не прогадаем.
avatar
Видимо, мы не понимаем друг друга. Можно добавить туда соли. Мы опять уходим в детали, это все решаемо.
avatar
Хотелось бы чтобы данный дискус закончился коммитом :)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.