|
|
|
Где лучше хранить статус пользователя?
|
|||
|---|---|---|---|
|
#18+
Пользователи на сайте имеют различные статусы: guest, customer, admin. При авторизации узнаю из базы id и status пользователя и храню их в сессии и проверяю как if ($_SESSION('status') == 'admin') ... Хотя слышал, что хранить в сессиях статус не безопасно, но если каждый раз брать его из базы, то придется делать запросы при любом чихе! Как лучше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2013, 19:32 |
|
||
|
Где лучше хранить статус пользователя?
|
|||
|---|---|---|---|
|
#18+
Shitbox2слышал, что хранить в сессиях статус не безопасно, но если каждый раз брать его из базы, то придется делать запросы при любом чихе!Может обоснуете "опасность" хранения данных в сессии и "безопасность" при хранении тех же данных в базе (кривые руки администратора сервера и разработчика не в счет). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2013, 19:41 |
|
||
|
Где лучше хранить статус пользователя?
|
|||
|---|---|---|---|
|
#18+
Да просто слышал звон... Не могу найти статью, но там вскользь говорилось, что в сессиях хорошо хранить айдишник, язык сайта, а из БД брать статусы, ранги и т.п. Там это никак не обосновывалось, поэтому решил здесь спросить. Как это делают крутые ребята? Как в Гугле или контакте хранят статусы и, вообще, инфу о пользователях? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2013, 19:47 |
|
||
|
Где лучше хранить статус пользователя?
|
|||
|---|---|---|---|
|
#18+
И еще, все значимые статьи или дебаты по этому поводу, которые читал, 10-летней давности. Ничего не изменилось с тех пор? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2013, 19:49 |
|
||
|
Где лучше хранить статус пользователя?
|
|||
|---|---|---|---|
|
#18+
Shitbox2, Ещё есть кэши... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2013, 19:49 |
|
||
|
Где лучше хранить статус пользователя?
|
|||
|---|---|---|---|
|
#18+
А в чем прикол хранить в сессиях кеш статуса? По сути, у нас есть только два постоянных хранилища: куки+сессии и БД/файлы/и.т.п. Первые менее безопасны, а вторые ресурсоемки. Вот на счет того, что сессии небезопасны... Может быть это миф? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2013, 20:13 |
|
||
|
Где лучше хранить статус пользователя?
|
|||
|---|---|---|---|
|
#18+
Shitbox2, Я не знаю в чём прикол "хранить в сессиях кеш статуса". Я о том, что можно хранить в кэше по айдишнику пользователя его статус. Если там не будет соответствующего ключа - то сделать запрос. Если есть, то взять из кэша и не делать запрос в базу. Некоторые ORM позволяют осуществлять кэширование на уровне моделей. P. S. Memcached или Redis тебе в помощь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2013, 20:30 |
|
||
|
Где лучше хранить статус пользователя?
|
|||
|---|---|---|---|
|
#18+
А... Не так понял. Рассмотрю вариант. По безопасности, наверное, такой же, просто никто не додумается искать такую инфу в кэше) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2013, 21:13 |
|
||
|
Где лучше хранить статус пользователя?
|
|||
|---|---|---|---|
|
#18+
Shitbox2, Чувак, как уже говорили раньше - никто не получит ни сессий, ни бд, ни кэша, если сервер настроен грамотно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2013, 21:47 |
|
||
|
Где лучше хранить статус пользователя?
|
|||
|---|---|---|---|
|
#18+
Эта идея мне нравится) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2013, 22:27 |
|
||
|
Где лучше хранить статус пользователя?
|
|||
|---|---|---|---|
|
#18+
Сейчас еще есть HTML5 Local Storage. Если какая-нибудь система пишется, где можно браузеры пользователям застандартизировать, можно еспользовать его. Чтобы произвольным способом не меняли - подписать данные на сервере.(google: signed cookie) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2013, 09:56 |
|
||
|
Где лучше хранить статус пользователя?
|
|||
|---|---|---|---|
|
#18+
Только вчера экспериментировал с Local Storage ) Пока все же остановился на сессиях. Хочу подробнее спросить, о регистрации, авторизации, статусах и т.п. Сделал все за пол дня с учетом изучения материала. При регистрации проверка, на существование пользователя с таким же логином, при авторизации сверка MD5 пароля = MD5 пароля в БД, где логин = логин в БД. В $_SESSION сохраняется 'id' = айди пользователя, 'status' = статус пользователя. Ну и везде проверки типа if ($_SESSION['status'] == 'admin') show_admin_control()... Как-то подозрительно просто... У меня на меню и на многоязычность ушло около недели, а тут так быстро и без проблем. Расскажите, как вы делаете и на что стоит обратить внимание. Что мог упустить из виду? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2013, 07:30 |
|
||
|
Где лучше хранить статус пользователя?
|
|||
|---|---|---|---|
|
#18+
Shitbox2, статус пользователя храню в БД. Когда нужно его проверить, то обращаюсь за ним средствами ORM по идентификатору пользователя и хэшу пароля, которые хранятся в Cookie. При этом сначала проверяю, что пользователь залогинен (в Cookie есть идентификатор и хэш пароля) и существует. Если так, то запросом достаю статус пользователя. Почему так: 1. запрос данных по идентификатору пользователя ну очень быстр, да и в СУБД есть встроенный механизм кэширования запросов; 2. пока живёт сессия, то пользователю могут поменять статус, пароль, или вообще удалить (это кстати к вопросу о безопасности Вашего решения). Как-то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2013, 08:21 |
|
||
|
Где лучше хранить статус пользователя?
|
|||
|---|---|---|---|
|
#18+
skyANA, вот вот, имено так 1) какой нафиг кеш если уже есть базка откуда всеарвно надо каждый раз брать текущего юзера? Вам там last_visit, visit_count обновлять не надо? Проверить system_status != blocked ? 2) восновном делаеться примерно так: есть класс User или WebUser (чаще это ОРМ модель), которая имеет метод: hasAccess, hasPermission или еще как то так. И везде просто спрашиваешь: $user->hasAccess('CHANGE_PAGE') где имееться табличка пермишенов, кто что может делать. ну или в вашем случае можно просто admin, guest ... передавать. И тут без разницы где статус храниться, в БД, кеше всеравно логика описываеться в 1 месте, и если что вы сможете просто ее поменять. 3) подпразумеваеться наверное что сесионую куку могут украсть. ТОгда ни хранение в кеше ни повторное обращение к БД вас уже не спасут. првоеряйте IP и используйте другие способы защиты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2013, 09:19 |
|
||
|
Где лучше хранить статус пользователя?
|
|||
|---|---|---|---|
|
#18+
Значит, в случае выбора статуса из БД не так страшен черт как его малюют) Вообще, да, злоумышленник может тупо обновлять страницу с выводом чего угодно, гененируя куда более сложные запросы... Класс такой у меня есть, кстати. Проверки делаю как if ($user->status() == 'admin'). Переделаю на БД, в сессии один id оставлю) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2013, 19:23 |
|
||
|
Где лучше хранить статус пользователя?
|
|||
|---|---|---|---|
|
#18+
И чтобы не отходить далеко. По поводу моего $user->status(). Стоит ли использовать волшебные методы _get(), _set() в этом случае. Ни разу сними не работал, но по описанию должно быть удобно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2013, 19:40 |
|
||
|
Где лучше хранить статус пользователя?
|
|||
|---|---|---|---|
|
#18+
Shitbox2И чтобы не отходить далеко. По поводу моего $user->status(). Стоит ли использовать волшебные методы _get(), _set() в этом случае. Ни разу сними не работал, но по описанию должно быть удобно Ниче не понятно что вы хотите с ними сделать? Добавить методы типа: isAdmin(), isGuest().... ? это __call Тогда уж называеться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2013, 19:53 |
|
||
|
Где лучше хранить статус пользователя?
|
|||
|---|---|---|---|
|
#18+
Ну да, только это слишком раздувает класс. А было бы удобно... Код: php 1. 2. 3. 4. 5. 6. 7. ...любой параметр вытаскивать и записывать в базу записями $param = $user->param, $user->param = 'значение параметра' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2013, 20:05 |
|
||
|
Где лучше хранить статус пользователя?
|
|||
|---|---|---|---|
|
#18+
И по старой традиции, вопрос в догонку) SELECT * и SELECT `field`одинаково по скорости работают? Может быть проще всегда SELECT * использовать, а там просто выбирать из массива то, что нужно, типа $user->info['status']? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2013, 20:43 |
|
||
|
Где лучше хранить статус пользователя?
|
|||
|---|---|---|---|
|
#18+
Ага, а еще можно памяти докупить. Ну, надо же где-то хранить туеву хучу ненужных данных, что вернулись как результат запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2013, 21:49 |
|
||
|
Где лучше хранить статус пользователя?
|
|||
|---|---|---|---|
|
#18+
vkleАга, а еще можно памяти докупить. Ну, надо же где-то хранить туеву хучу ненужных данных, что вернулись как результат запроса. Я думаю в этом случае лучше один раз забрать всю строку и не париться (мы же не 1000 стрко берем) чем жля каждой нужного поля делать запрос к базке. Shitbox2 Код: php 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2013, 11:44 |
|
||
|
Где лучше хранить статус пользователя?
|
|||
|---|---|---|---|
|
#18+
Shitbox2Ну да, только это слишком раздувает класс. А было бы удобно... Код: php 1. 2. 3. 4. 5. 6. 7. ...любой параметр вытаскивать и записывать в базу записями $param = $user->param, $user->param = 'значение параметра'Это что, попытка реализовать Active Record pattern? Советую исследовать уже готовые решения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2013, 13:31 |
|
||
|
|

start [/forum/topic.php?fid=23&gotonew=1&tid=1464076]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
69ms |
get topic data: |
12ms |
get first new msg: |
6ms |
get forum data: |
3ms |
get page messages: |
80ms |
get tp. blocked users: |
1ms |
| others: | 249ms |
| total: | 460ms |

| 0 / 0 |
