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 :: Хранение данных пользователя [2]
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
caballero пишет:
боты которые курлом ходят
Боты с курлом в яндекс-метрике не отобразятся. Зачем им метрику тягать-то?
Hapson пишет:
Судя по яндекс метрике моего сайта, с февраля этого года, куки включены у 99,33% пользователей.
И это по метрике, т.е. куки третьей стороны. Что не означает, что куки были выключены совсем.
----- PostgreSQL DBA
Hapson
Отправлено: 18 Августа, 2013 - 20:21:59
Посетитель
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
Короче говоря - у кого куки выключены, те пусть идут лесом.
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
Vinyl
Отправлено: 18 Августа, 2013 - 20:33:51
Частый посетитель
Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012 Откуда: Армавир, Краснодарский край
Помог: 15 раз(а)
Или я Вас не пойму, или Вы фигнёй занимаетесь.
Когда проходит процесс авторизации, нужно сделать выборку из базы, чтобы проверить пароль. Заодно выберите и все данные юзера, которые могут пригодиться в дальнейшем, и держите их свойствами класса / массивом. В любом месте приложения (авторизация все равно должна быть выше мест, в которых понадобятся различные данные пользователя, по логике, иначе приложение кривое) пишете что-то типа $user->email - вот Вам и email, $user->hash - вот Вам и хэш пароля. Это при авторизации.
Потом, при каждом запросе к движку в любом случае должна проходить аутентификация, при которой все равно придется лезть в БД за хешем пароля (либо токеном), делаете то же самое, что я описал выше.
P.S. Я сессиями вообще не пользуюсь, у меня везде авторизация устроена так:
Авторизация: (цель - поставить токен, либо отправить обратно к форме)
Приходит POST из формы входа
Идем в таблицу users базы данных, выбираем все поля, включая хэш, соль, мыло, имя, фамилию, и т.д., складываем это в массив $user->data
Проверяем на соответствие данные из POST с данными из БД
Если все совпало, добавляем токен в таблицу tokens, который содержит сам токен + IP + UA + ID пользователя + Кол-во неудачных попыток входа + можно ещё чего-нибудь придумать
Ставим куку с самим токеном
На всякий случай убиваем $user->hash и $user->salt, они нам больше не нужны
Аутентификация: (цель - проверить токен и узнать, что за пользователь тут)
Смотрим в куку
Идем в таблицу tokens базы данных, выбираем все поля
Проверяем на соответствие данные из POST+$_SERVER с данными из БД
Если все совпало, делаем выборку из users, собираем в массив $user->data
При этом у меня аутентификация проходит вообще при каждом обращении к движку, даже при авторизации, т.е., сам процесс авторизации только лишь проверяет пару логин-пароль и ставит токен. При таком подходе очень удобно хранить данные в объекте User, никаких файлов и сессий. Выборка из базы два раза при авторизации и один раз при обычной работе приложения.
Покинул форум
Сообщений всего: 147
Дата рег-ции: Авг. 2013
Помог: 4 раз(а)
[+]
Vinyl пишет:
Или я Вас не пойму, или Вы фигнёй занимаетесь.
Судя по всему второе, плюс активное нежелание учится.
Hapson
Отправлено: 18 Августа, 2013 - 21:15:51
Посетитель
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
Vinyl пишет:
Выборка из базы два раза при авторизации и один раз при обычной работе приложения
Вот именно, каждое обновление страницы - выборка из базы. Зачем?
Я делаю так:
Авторизация:
Принял пост из которого мне нужен email и passowrd.
Выбираю из базы все данные на пользователя по email, если есть такой email.
Сравниваю password
Если совпадает, то заполняю свойства объекта $user данными из БД. Среди свойств есть уникальный идентификатор, за которым не нужно лезть в базу. Ну например это хеш какогото свойства + юзер-агент
Кидаю объект $user в сессию.
Ставлю куку.
Перезапрос страницы и далее
Аутентификация:
Смотрю, есть ли в сессии уникальный идентификатор и сравниваю его.
Если подходит, то заполняю свойства объекта из сессии
Все - нет запроса в БД.
А если в сессии нет того что нужно, то тогда уже проверяю куку. Если она есть, то для ее проверки нужно залезть в БД.
Однако при навигации по сайту аутентификация держится на сессии и нет никаких запросов в БД. А чтобы куку сравнить, это можно и в БД сходить - это один раз. (Добавление)
Squirrel пишет:
Vinyl пишет:
Или я Вас не пойму, или Вы фигнёй занимаетесь.
Судя по всему второе, плюс активное нежелание учится.
Вы не поверите, я все свободное время учусь и ищу самые лучшие реализации разных вещей
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
Vinyl
Отправлено: 18 Августа, 2013 - 21:20:41
Частый посетитель
Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012 Откуда: Армавир, Краснодарский край
Помог: 15 раз(а)
Hapson пишет:
Смотрю, есть ли в сессии уникальный идентификатор и сравниваю его
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
Vinyl пишет:
Hapson пишет:
Смотрю, есть ли в сессии уникальный идентификатор и сравниваю его
C чем?
Если есть этот идентификатор, то значит есть и все остальное (свойства объекта $user). А идентификатор это хеш какого-то свойства + например юзер_агент (Добавление)
caballero пишет:
Цитата:
Ставлю куку.
зачем?
Галочка "запомнить на 2 недели" (Добавление) Vinyl
Если точно, то сейчас в сессию кладется
Да, это коряво, я думаю над этим - из чего лепить идентификатор, за которым не нужно лезть в БД (Добавление)
Hapson пишет:
Да, это коряво, я думаю над этим - из чего лепить идентификатор, за которым не нужно лезть в БД
Хотя, почему же коряво, мне кажется нормально.
md5([юзер-агент]+[IP]+[email])
email у меня вместо логина, то есть уникальный. IP в течении сессии не меняется. А юзер-агент... ну и флаг с ним
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
LIME
Отправлено: 18 Августа, 2013 - 22:03:15
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
нет не коряво
я просто ip храню в сессии
в подавляющем большинстве случаев этого более чем достаточно
если у пользака с того же ip прилетел тот же SID то все ок
если SID перехватят то ip не подделают (Добавление)
Vinyl пишет:
Потом, при каждом запросе к движку в любом случае должна проходить аутентификация, при которой все равно придется лезть в БД за хешем пароля
совсем не обязательно
достаточно проверить ip из сессии (Добавление)
LIME пишет:
совсем не обязательно
даже будетлишним
Vinyl
Отправлено: 18 Августа, 2013 - 22:30:32
Частый посетитель
Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012 Откуда: Армавир, Краснодарский край
Помог: 15 раз(а)
LIME пишет:
даже будетлишним
У каждого своя точка зрения на этот счет, иначе, были бы как с инкубатора
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
эммм))
как бы не совсем понятно зачем проверять пароль на каждый запрос если мы уже его проверили и на основании этого создали сессию
ведь пароль лежит уже в сессии(или в куке что гораздо хуже) и другим оказаться не может))
Vinyl
Отправлено: 18 Августа, 2013 - 22:38:33
Частый посетитель
Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012 Откуда: Армавир, Краснодарский край
Помог: 15 раз(а)
Ну в куке у меня токен, а не пароль и даже не его хэш.
LIME пишет:
зачем проверять пароль на каждый запрос если мы уже его проверили и на основании этого создали сессию
0. Сессии не люблю
1. Сессию подменить проще, чем запись в БД (особенно на хостингах)
2. Вдруг я его снесу, а он будет залогинен до истечения времени сессии.
ini файл здесь заменяет БД. В реальности конечно нужно дописать вывод ошибок если что-то не заполнено или заполнено не тем. Для коннекта с БД использую отдельный класс, который сам там все экранирует и возвращает что нужно.
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
DelphinPRO
Отправлено: 18 Августа, 2013 - 23:30:16
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Vinyl пишет:
0. Сессии не люблю
как говорится, - это ваши личные проблемы
Vinyl пишет:
Сессию подменить проще, чем запись в БД (особенно на хостингах)
Ну не так уж и просто ее подменить, не нагнетайте..
Vinyl пишет:
2. Вдруг я его снесу, а он будет залогинен до истечения времени сессии.
Для это давно придуманы различные механизмы\алгоритмы, не проблема вообще.
Также придеживаюсь мнения, что незачем лезть лишний раз базу, когда и так понятно кто перед нами..
----- Чем больше узнаю, тем больше я не знаю.
Саныч
Отправлено: 18 Августа, 2013 - 23:35:32
Участник
Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010 Откуда: Украина, Запорожье
Помог: 62 раз(а)
DelphinPRO пишет:
Для это давно придуманы различные механизмы\алгоритмы, не проблема вообще.
Можно пару слов подробнее по этому поводу?
----- Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.