Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Авторизация на куках и сесиях
Покинул форум
Сообщений всего: 65
Дата рег-ции: Янв. 2013
Помог: 0 раз(а)
Здравствуйте, пишу скрипт авторизации на куках и сесиях. Возник у меня один вопрос.
После удачной авторизации я отправляю юзеру куки если он нажал "запомнить меня", в куках пока храню только хеш. Вроде все работает нормально, но вопрос в другом:
Как мне правильно определить авторизирован пользователь или нет, сейчас я делаю это так:
если установлена кука то ищем в базе юзера с такой кукой, но пулучаеться что если припустим пользователей на сайт зайдет 1000 то это уже 1000 запросов + если пользователь просмотрит 10 страниц на сайте то это 10к запросов только на проверку авторизации.
Чувствую нутром что то то не то делаю, посоветуйте пожалуйста как правильно сделать.
_Dark_
Отправлено: 06 Августа, 2013 - 18:24:31
Частый гость
Покинул форум
Сообщений всего: 231
Дата рег-ции: Окт. 2011
Помог: 5 раз(а)
[+]
В БД в таблице sessions хранится идентификатор сессии пользователя, в cookie ему ставите идентификатор. При заходе пользователя берете сессию из БД по идентификатору в cookie и тем самым идентифицируете пользователя.
По другому никак.
vens
Отправлено: 06 Августа, 2013 - 18:52:37
Гость
Покинул форум
Сообщений всего: 65
Дата рег-ции: Янв. 2013
Помог: 0 раз(а)
_Dark_ пишет:
В БД в таблице sessions хранится идентификатор сессии пользователя, в cookie ему ставите идентификатор. При заходе пользователя берете сессию из БД по идентификатору в cookie и тем самым идентифицируете пользователя.
По другому никак.
Слишком много запросов, думал можно как-то их уменьшить ...
DelphinPRO
Отправлено: 06 Августа, 2013 - 19:03:13
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
vens пишет:
После удачной авторизации я отправляю юзеру куки если он нажал "запомнить меня", в куках пока храню только хеш. Вроде все работает нормально, но вопрос в другом:
ну ок. храните хеш. При первом заходе на сайт (после некоторого отсутствия) вы лезете в базу и сверяете. Если проверка успешна - пишете в сессию идентификатор какой-нить, и по нему определяете, что юзер авторизован, и в базу лезть не надо.
Покинул форум
Сообщений всего: 315
Дата рег-ции: Янв. 2012 Откуда: Минск
Помог: 9 раз(а)
vens пишет:
Слишком много запросов, думал можно как-то их уменьшить ...
Быстрее обратиться к бд, чем считывать файл сессии на жестком диске.
vens пишет:
зайдет 1000 то это уже 1000 запросов + если пользователь просмотрит 10 страниц на сайте то это 10к запросов только на проверку авторизации.
ИМХО, 10тыс запросов не будут отправлены за пару секунд, если база не падает - рано думать об оптимизации запросов.
DelphinPRO
Отправлено: 06 Августа, 2013 - 22:21:18
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
NoPaper пишет:
Быстрее обратиться к бд, чем считывать файл сессии на жестком диске.
Предъявите результаты проведенных тестов с замерами скорости.
----- Чем больше узнаю, тем больше я не знаю.
Мелкий
Отправлено: 06 Августа, 2013 - 22:26:08
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
vens пишет:
если установлена кука то ищем в базе юзера с такой кукой, но пулучаеться что если припустим пользователей на сайт зайдет 1000 то это уже 1000 запросов + если пользователь просмотрит 10 страниц на сайте то это 10к запросов только на проверку авторизации.
Храните сессионные (короткоживущие) идентификаторы в memcache. Долговременную авторизацию - в базе.
Если такая архитектура подходит рамблер-почте, то и вас устроит.
Если пришла кука долгоживущей авторизации, но нет короткоживущей - валидируйте куку и стартуйте короткую сессию.
----- PostgreSQL DBA
vens
Отправлено: 06 Августа, 2013 - 22:30:24
Гость
Покинул форум
Сообщений всего: 65
Дата рег-ции: Янв. 2013
Помог: 0 раз(а)
NoPaper пишет:
vens пишет:
Слишком много запросов, думал можно как-то их уменьшить ...
Быстрее обратиться к бд, чем считывать файл сессии на жестком диске.
vens пишет:
зайдет 1000 то это уже 1000 запросов + если пользователь просмотрит 10 страниц на сайте то это 10к запросов только на проверку авторизации.
ИМХО, 10тыс запросов не будут отправлены за пару секунд, если база не падает - рано думать об оптимизации запросов.
Да согласен что одновременно не будут отправлены, но кроме авторизации есть еще много информации которою нужно выводить с базы... И все в месте как по мне создаст не хилую нагрузку.
Возможно я и не прав, хочу услышать от гору что они думают об этом ) (Добавление)
Мелкий пишет:
vens пишет:
если установлена кука то ищем в базе юзера с такой кукой, но пулучаеться что если припустим пользователей на сайт зайдет 1000 то это уже 1000 запросов + если пользователь просмотрит 10 страниц на сайте то это 10к запросов только на проверку авторизации.
Храните сессионные (короткоживущие) идентификаторы в memcache. Долговременную авторизацию - в базе.
Если такая архитектура подходит рамблер-почте, то и вас устроит.
Если пришла кука долгоживущей авторизации, но нет короткоживущей - валидируйте куку и стартуйте короткую сессию.
Суть понял, но как реализовать не очень
Может подкинете какой-то кусочек кода для примера?
caballero
Отправлено: 07 Августа, 2013 - 01:31:31
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
Предъявите результаты проведенных тестов с замерами скорости.
в общем БД работает быстрее потому что спроектирована для этого. Но поскольку файлы сессий небольшие то вероятнее всего они будут считаны быстрее потому как будут болтатся в дисковом кеше (Добавление)
Цитата:
В БД в таблице sessions хранится идентификатор сессии пользователя, в cookie ему ставите идентификатор. При заходе пользователя берете сессию из БД по идентификатору в cookie и тем самым идентифицируете пользователя.
По другому никак.
зачем какая то таблица сессий если есть таблица юзеров с идентификаторами
Цитата:
если припустим пользователей на сайт зайдет 1000 то это уже 1000 запросов
если юзер зайдет на сайт то понадобится на два порядка больше запросов. Хотя бы чтоб показать юзеру контент страниц на которые он зашел. Однократный запрос при авторизации - ничего не меняет
При авторизации генерируется хэш, добавляется запись в sessions и устанавливается cookie с этим хэшем пользователю.
При заходе пользователя скрипт сравнивает его хэш и IP адрес с данными в таблице. Если совпадение есть — пользователь идентифицирован и мы можем из таблицы пользователей загрузить его по его ID.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.