Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Где лучше хранить статус пользователя? / 22 сообщений из 22, страница 1 из 1
24.02.2013, 19:32
    #38163860
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить статус пользователя?
Пользователи на сайте имеют различные статусы: guest, customer, admin.
При авторизации узнаю из базы id и status пользователя и храню их в сессии и проверяю как if ($_SESSION('status') == 'admin') ... Хотя слышал, что хранить в сессиях статус не безопасно, но если каждый раз брать его из базы, то придется делать запросы при любом чихе!

Как лучше?
...
Рейтинг: 0 / 0
24.02.2013, 19:41
    #38163862
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить статус пользователя?
Shitbox2слышал, что хранить в сессиях статус не безопасно, но если каждый раз брать его из базы, то придется делать запросы при любом чихе!Может обоснуете "опасность" хранения данных в сессии и "безопасность" при хранении тех же данных в базе (кривые руки администратора сервера и разработчика не в счет).
...
Рейтинг: 0 / 0
24.02.2013, 19:47
    #38163865
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить статус пользователя?
Да просто слышал звон... Не могу найти статью, но там вскользь говорилось, что в сессиях хорошо хранить айдишник, язык сайта, а из БД брать статусы, ранги и т.п. Там это никак не обосновывалось, поэтому решил здесь спросить. Как это делают крутые ребята? Как в Гугле или контакте хранят статусы и, вообще, инфу о пользователях?
...
Рейтинг: 0 / 0
24.02.2013, 19:49
    #38163866
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить статус пользователя?
И еще, все значимые статьи или дебаты по этому поводу, которые читал, 10-летней давности. Ничего не изменилось с тех пор?
...
Рейтинг: 0 / 0
24.02.2013, 19:49
    #38163867
NekZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить статус пользователя?
Shitbox2,

Ещё есть кэши...
...
Рейтинг: 0 / 0
24.02.2013, 20:13
    #38163876
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить статус пользователя?
А в чем прикол хранить в сессиях кеш статуса? По сути, у нас есть только два постоянных хранилища: куки+сессии и БД/файлы/и.т.п. Первые менее безопасны, а вторые ресурсоемки. Вот на счет того, что сессии небезопасны... Может быть это миф?
...
Рейтинг: 0 / 0
24.02.2013, 20:30
    #38163891
NekZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить статус пользователя?
Shitbox2,

Я не знаю в чём прикол "хранить в сессиях кеш статуса".
Я о том, что можно хранить в кэше по айдишнику пользователя его статус. Если там не будет соответствующего ключа - то сделать запрос. Если есть, то взять из кэша и не делать запрос в базу. Некоторые ORM позволяют осуществлять кэширование на уровне моделей.

P. S. Memcached или Redis тебе в помощь
...
Рейтинг: 0 / 0
24.02.2013, 21:13
    #38163912
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить статус пользователя?
А... Не так понял. Рассмотрю вариант. По безопасности, наверное, такой же, просто никто не додумается искать такую инфу в кэше)
...
Рейтинг: 0 / 0
24.02.2013, 21:47
    #38163917
NekZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить статус пользователя?
Shitbox2,

Чувак, как уже говорили раньше - никто не получит ни сессий, ни бд, ни кэша, если сервер настроен грамотно
...
Рейтинг: 0 / 0
24.02.2013, 22:27
    #38163943
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить статус пользователя?
Эта идея мне нравится)
...
Рейтинг: 0 / 0
25.02.2013, 09:56
    #38164208
Inkelyad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить статус пользователя?
Сейчас еще есть HTML5 Local Storage. Если какая-нибудь система пишется, где можно
браузеры пользователям застандартизировать, можно еспользовать его.
Чтобы произвольным способом не меняли - подписать данные на сервере.(google: signed cookie)
...
Рейтинг: 0 / 0
26.02.2013, 07:30
    #38165766
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить статус пользователя?
Только вчера экспериментировал с Local Storage ) Пока все же остановился на сессиях.

Хочу подробнее спросить, о регистрации, авторизации, статусах и т.п.

Сделал все за пол дня с учетом изучения материала. При регистрации проверка, на существование пользователя с таким же логином, при авторизации сверка MD5 пароля = MD5 пароля в БД, где логин = логин в БД. В $_SESSION сохраняется 'id' = айди пользователя, 'status' = статус пользователя. Ну и везде проверки типа if ($_SESSION['status'] == 'admin') show_admin_control()...

Как-то подозрительно просто... У меня на меню и на многоязычность ушло около недели, а тут так быстро и без проблем. Расскажите, как вы делаете и на что стоит обратить внимание. Что мог упустить из виду?
...
Рейтинг: 0 / 0
26.02.2013, 08:21
    #38165785
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить статус пользователя?
Shitbox2, статус пользователя храню в БД.
Когда нужно его проверить, то обращаюсь за ним средствами ORM по идентификатору пользователя и хэшу пароля, которые хранятся в Cookie.
При этом сначала проверяю, что пользователь залогинен (в Cookie есть идентификатор и хэш пароля) и существует.
Если так, то запросом достаю статус пользователя.

Почему так:
1. запрос данных по идентификатору пользователя ну очень быстр, да и в СУБД есть встроенный механизм кэширования запросов;
2. пока живёт сессия, то пользователю могут поменять статус, пароль, или вообще удалить (это кстати к вопросу о безопасности Вашего решения).

Как-то так.
...
Рейтинг: 0 / 0
26.02.2013, 09:19
    #38165808
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить статус пользователя?
skyANA,

вот вот, имено так
1) какой нафиг кеш если уже есть базка откуда всеарвно надо каждый раз брать текущего юзера? Вам там last_visit, visit_count обновлять не надо? Проверить system_status != blocked ?
2) восновном делаеться примерно так: есть класс User или WebUser (чаще это ОРМ модель), которая имеет метод: hasAccess, hasPermission или еще как то так. И везде просто спрашиваешь: $user->hasAccess('CHANGE_PAGE') где имееться табличка пермишенов, кто что может делать. ну или в вашем случае можно просто admin, guest ... передавать. И тут без разницы где статус храниться, в БД, кеше всеравно логика описываеться в 1 месте, и если что вы сможете просто ее поменять.
3) подпразумеваеться наверное что сесионую куку могут украсть. ТОгда ни хранение в кеше ни повторное обращение к БД вас уже не спасут. првоеряйте IP и используйте другие способы защиты.
...
Рейтинг: 0 / 0
26.02.2013, 19:23
    #38167051
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить статус пользователя?
Значит, в случае выбора статуса из БД не так страшен черт как его малюют) Вообще, да, злоумышленник может тупо обновлять страницу с выводом чего угодно, гененируя куда более сложные запросы...

Класс такой у меня есть, кстати. Проверки делаю как if ($user->status() == 'admin'). Переделаю на БД, в сессии один id оставлю)
...
Рейтинг: 0 / 0
26.02.2013, 19:40
    #38167076
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить статус пользователя?
И чтобы не отходить далеко. По поводу моего $user->status(). Стоит ли использовать волшебные методы _get(), _set() в этом случае. Ни разу сними не работал, но по описанию должно быть удобно
...
Рейтинг: 0 / 0
26.02.2013, 19:53
    #38167095
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить статус пользователя?
Shitbox2И чтобы не отходить далеко. По поводу моего $user->status(). Стоит ли использовать волшебные методы _get(), _set() в этом случае. Ни разу сними не работал, но по описанию должно быть удобно
Ниче не понятно что вы хотите с ними сделать?
Добавить методы типа: isAdmin(), isGuest().... ? это __call Тогда уж называеться.
...
Рейтинг: 0 / 0
26.02.2013, 20:05
    #38167111
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить статус пользователя?
Ну да, только это слишком раздувает класс. А было бы удобно...

Код: php
1.
2.
3.
4.
5.
6.
7.
public function __get($param) {
    if (array_key_exists($params, $this->params)) {
        $res = mysql_query("select `" . $param . "` from `users` where `id` = '" . $this->getCurrentId() . "'" );

        return $param_from_db;
    }
}


...любой параметр вытаскивать и записывать в базу записями $param = $user->param, $user->param = 'значение параметра'
...
Рейтинг: 0 / 0
26.02.2013, 20:43
    #38167150
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить статус пользователя?
И по старой традиции, вопрос в догонку) SELECT * и SELECT `field`одинаково по скорости работают? Может быть проще всегда SELECT * использовать, а там просто выбирать из массива то, что нужно, типа $user->info['status']?
...
Рейтинг: 0 / 0
26.02.2013, 21:49
    #38167198
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить статус пользователя?
Ага, а еще можно памяти докупить. Ну, надо же где-то хранить туеву хучу ненужных данных, что вернулись как результат запроса.
...
Рейтинг: 0 / 0
27.02.2013, 11:44
    #38167744
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить статус пользователя?
vkleАга, а еще можно памяти докупить. Ну, надо же где-то хранить туеву хучу ненужных данных, что вернулись как результат запроса.
Я думаю в этом случае лучше один раз забрать всю строку и не париться (мы же не 1000 стрко берем) чем жля каждой нужного поля делать запрос к базке.
Shitbox2
Код: php
1.
        $res = mysql_query("select `" . $param . "` from `users` where `id` = '" . $this->getCurrentId() . "'" );
...
Рейтинг: 0 / 0
27.02.2013, 13:31
    #38167946
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить статус пользователя?
Shitbox2Ну да, только это слишком раздувает класс. А было бы удобно...

Код: php
1.
2.
3.
4.
5.
6.
7.
public function __get($param) {
    if (array_key_exists($params, $this->params)) {
        $res = mysql_query("select `" . $param . "` from `users` where `id` = '" . $this->getCurrentId() . "'" );

        return $param_from_db;
    }
}


...любой параметр вытаскивать и записывать в базу записями $param = $user->param, $user->param = 'значение параметра'Это что, попытка реализовать Active Record pattern? Советую исследовать уже готовые решения
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Где лучше хранить статус пользователя? / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]