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 :: Авторизация на куках и сесиях

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
vens
Отправлено: 06 Августа, 2013 - 17:58:31
Post Id



Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




Здравствуйте, пишу скрипт авторизации на куках и сесиях. Возник у меня один вопрос.

После удачной авторизации я отправляю юзеру куки если он нажал "запомнить меня", в куках пока храню только хеш. Вроде все работает нормально, но вопрос в другом:

Как мне правильно определить авторизирован пользователь или нет, сейчас я делаю это так:
если установлена кука то ищем в базе юзера с такой кукой, но пулучаеться что если припустим пользователей на сайт зайдет 1000 то это уже 1000 запросов + если пользователь просмотрит 10 страниц на сайте то это 10к запросов только на проверку авторизации.

Чувствую нутром что то то не то делаю, посоветуйте пожалуйста как правильно сделать.
 
 Top
_Dark_
Отправлено: 06 Августа, 2013 - 18:24:31
Post Id


Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Окт. 2011  


Помог: 5 раз(а)

[+]


В БД в таблице sessions хранится идентификатор сессии пользователя, в cookie ему ставите идентификатор. При заходе пользователя берете сессию из БД по идентификатору в cookie и тем самым идентифицируете пользователя.
По другому никак.
 
 Top
vens
Отправлено: 06 Августа, 2013 - 18:52:37
Post Id



Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




_Dark_ пишет:
В БД в таблице sessions хранится идентификатор сессии пользователя, в cookie ему ставите идентификатор. При заходе пользователя берете сессию из БД по идентификатору в cookie и тем самым идентифицируете пользователя.
По другому никак.


Слишком много запросов, думал можно как-то их уменьшить ...
 
 Top
DelphinPRO
Отправлено: 06 Августа, 2013 - 19:03:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




vens пишет:
После удачной авторизации я отправляю юзеру куки если он нажал "запомнить меня", в куках пока храню только хеш. Вроде все работает нормально, но вопрос в другом:

ну ок. храните хеш. При первом заходе на сайт (после некоторого отсутствия) вы лезете в базу и сверяете. Если проверка успешна - пишете в сессию идентификатор какой-нить, и по нему определяете, что юзер авторизован, и в базу лезть не надо.

т.е. алгоритм.

CODE (text):
скопировать код в буфер обмена
  1. - Проверяем сессию.
  2. -- Флаг установлен
  3. --- все ok, пользователь авторизован.
  4. -- Флаг не установлен
  5. --- Проверяем куку
  6. ---- Кука установлена
  7. ----- Сверяем с базой
  8. ------ Успешно. Авторизован.
  9. ------- Ставим куку(обновляем, необязательно), пишем в сессию пользователя.
  10. ------ Неуспешно. неавторизован.
  11. ------- Пишем в сессию, что это гость.
  12. ---- Кука не установлена
  13. ----- Пишем в сессию, что это гость.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
vens
Отправлено: 06 Августа, 2013 - 19:09:46
Post Id



Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




DelphinPRO

Спасибо за идею, буду пилить Радость

(Отредактировано автором: 06 Августа, 2013 - 19:10:08)

 
 Top
NoPaper
Отправлено: 06 Августа, 2013 - 21:41:22
Post Id



Посетитель


Покинул форум
Сообщений всего: 315
Дата рег-ции: Янв. 2012  
Откуда: Минск


Помог: 9 раз(а)




vens пишет:
Слишком много запросов, думал можно как-то их уменьшить ...

Быстрее обратиться к бд, чем считывать файл сессии на жестком диске.

vens пишет:
зайдет 1000 то это уже 1000 запросов + если пользователь просмотрит 10 страниц на сайте то это 10к запросов только на проверку авторизации.

ИМХО, 10тыс запросов не будут отправлены за пару секунд, если база не падает - рано думать об оптимизации запросов.
 
 Top
DelphinPRO
Отправлено: 06 Августа, 2013 - 22:21:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




NoPaper пишет:
Быстрее обратиться к бд, чем считывать файл сессии на жестком диске.

Предъявите результаты проведенных тестов с замерами скорости.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Мелкий Супермодератор
Отправлено: 06 Августа, 2013 - 22:26:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




vens пишет:
если установлена кука то ищем в базе юзера с такой кукой, но пулучаеться что если припустим пользователей на сайт зайдет 1000 то это уже 1000 запросов + если пользователь просмотрит 10 страниц на сайте то это 10к запросов только на проверку авторизации.

Храните сессионные (короткоживущие) идентификаторы в memcache. Долговременную авторизацию - в базе.
Если такая архитектура подходит рамблер-почте, то и вас устроит.

Если пришла кука долгоживущей авторизации, но нет короткоживущей - валидируйте куку и стартуйте короткую сессию.


-----
PostgreSQL DBA
 
 Top
vens
Отправлено: 06 Августа, 2013 - 22:30:24
Post Id



Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




NoPaper пишет:
vens пишет:
Слишком много запросов, думал можно как-то их уменьшить ...

Быстрее обратиться к бд, чем считывать файл сессии на жестком диске.

vens пишет:
зайдет 1000 то это уже 1000 запросов + если пользователь просмотрит 10 страниц на сайте то это 10к запросов только на проверку авторизации.

ИМХО, 10тыс запросов не будут отправлены за пару секунд, если база не падает - рано думать об оптимизации запросов.



Да согласен что одновременно не будут отправлены, но кроме авторизации есть еще много информации которою нужно выводить с базы... И все в месте как по мне создаст не хилую нагрузку.

Возможно я и не прав, хочу услышать от гору что они думают об этом )
(Добавление)
Мелкий пишет:
vens пишет:
если установлена кука то ищем в базе юзера с такой кукой, но пулучаеться что если припустим пользователей на сайт зайдет 1000 то это уже 1000 запросов + если пользователь просмотрит 10 страниц на сайте то это 10к запросов только на проверку авторизации.

Храните сессионные (короткоживущие) идентификаторы в memcache. Долговременную авторизацию - в базе.
Если такая архитектура подходит рамблер-почте, то и вас устроит.

Если пришла кука долгоживущей авторизации, но нет короткоживущей - валидируйте куку и стартуйте короткую сессию.


Суть понял, но как реализовать не очень Огорчение

Может подкинете какой-то кусочек кода для примера?
 
 Top
caballero
Отправлено: 07 Августа, 2013 - 01:31:31
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
Предъявите результаты проведенных тестов с замерами скорости.

в общем БД работает быстрее потому что спроектирована для этого. Но поскольку файлы сессий небольшие то вероятнее всего они будут считаны быстрее потому как будут болтатся в дисковом кеше
(Добавление)
Цитата:
В БД в таблице sessions хранится идентификатор сессии пользователя, в cookie ему ставите идентификатор. При заходе пользователя берете сессию из БД по идентификатору в cookie и тем самым идентифицируете пользователя.
По другому никак.

зачем какая то таблица сессий если есть таблица юзеров с идентификаторами

Цитата:
если припустим пользователей на сайт зайдет 1000 то это уже 1000 запросов

если юзер зайдет на сайт то понадобится на два порядка больше запросов. Хотя бы чтоб показать юзеру контент страниц на которые он зашел. Однократный запрос при авторизации - ничего не меняет


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
_Dark_
Отправлено: 07 Августа, 2013 - 11:17:01
Post Id


Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Окт. 2011  


Помог: 5 раз(а)

[+]


caballero пишет:
зачем какая то таблица сессий если есть таблица юзеров с идентификаторами

Наверное для того, чтобы можно было управлять сессиями?
P.S. Не путать с PHP сессиями.

(Отредактировано автором: 07 Августа, 2013 - 11:17:37)

 
 Top
caballero
Отправлено: 07 Августа, 2013 - 11:43:12
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
аверное для того, чтобы можно было управлять сессиями?
P.S. Не путать с PHP сессиями.

сессия есть сессия - сеанс связи юзера с системмой. Не может быть никакой сессии между заходами юзера на сайт.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
_Dark_
Отправлено: 07 Августа, 2013 - 12:59:10
Post Id


Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Окт. 2011  


Помог: 5 раз(а)

[+]


caballero пишет:
сессия есть сессия - сеанс связи юзера с системмой. Не может быть никакой сессии между заходами юзера на сайт.


Таблица sessions:


При авторизации генерируется хэш, добавляется запись в sessions и устанавливается cookie с этим хэшем пользователю.

При заходе пользователя скрипт сравнивает его хэш и IP адрес с данными в таблице. Если совпадение есть — пользователь идентифицирован и мы можем из таблицы пользователей загрузить его по его ID.

Что вы там хотите — понятия не имею.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB