Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 20.04.2016
Сообщений: 14

Объясните дураку, люди добрые!

21.05.2018, 21:17. Показов 713. Ответов 16

Студворк — интернет-сервис помощи студентам
Доброго времени суток, господа форумчане! Слезно прошу объяснить на пальцах, как должно происходить следующее: допустим, пользователь авторизовался на сайте, его тип учетки, скажем, "юзер", поэтому ему вывелись, к примеру, 2 таблицы с возможностью их просмотра. А второй юзер с типом учетки "админ" вошел в систему и ему доступны 3 таблицы с возможностью их редактирования. Я не прошу за меня это реализовывать, я лишь хочу, чтобы меня наставили на путь истинный. Я так подозреваю, что нужно юзать сессии и куки, но только не знаю, как именно.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.05.2018, 21:17
Ответы с готовыми решениями:

Люди помогите дураку научиться работать с STM32F4Discovery
Программу через какую программировать выбирайте сами, я покачто пытаюсь безуспешно освоить CoIDE. Мне плату и язык программирования до лета...

Объясните дураку
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="main.css"> ...

добрые люди
добрые люди,помоги решить пожалуйста, буду крайне признателен и благодарен Правила форума :rtfm: Правила, 5.16. Запрещено...

16
55 / 55 / 21
Регистрация: 01.03.2016
Сообщений: 594
21.05.2018, 21:32
В куках храним логин, пароль, индекс сессии.
Все данные пользователя в сессии по индексу. На данных сессии реализуем логику.
PHP
1
2
3
4
5
6
7
8
9
if(isset($_GET['PHPSESSID']))
            session_id($_GET['PHPSESSID']);
        elseif(isset($_POST['PHPSESSID']))
            session_id($_POST['PHPSESSID']);
        elseif(isset($_COOKIE['PHPSESSID']))
            session_id($_COOKIE['PHPSESSID']);
        
        session_set_cookie_params(аргументы); // Тут документацию читаем
        session_start();
1
0 / 0 / 0
Регистрация: 20.04.2016
Сообщений: 14
21.05.2018, 21:45  [ТС]
53ifbb, начал вникать в эту тему. "На данных сессии реализуем логику". А если не секрет, как это делается непосредственно в коде?
0
767 / 323 / 157
Регистрация: 26.05.2016
Сообщений: 2,127
21.05.2018, 21:56
Цитата Сообщение от Аполинар Посмотреть сообщение
Я не прошу за меня это реализовывать, я лишь хочу, чтобы меня наставили на путь истинный.
+
Цитата Сообщение от Аполинар Посмотреть сообщение
А если не секрет, как это делается непосредственно в коде?
=


П.С. Лучше сделайте главного админа, который решает для юзеров, какие таблицы им можно просматривать
1. заходите от админа - выводите список юзеров, рядом список таблиц и ставите галочки, на нужные таблицы, заносите все в базу
2. узер заходит - проверяйте кто зашел - исходя из этого ему выводится определенные таблицы
1
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
21.05.2018, 22:00
Сессии и куки нужны чтобы отличить одного юзера от другого. Благодая им получаете user_id и дальше уже можно вытащить любую инфу по юзеру из БД.
Соответственно где-то(например в таблице users), у вас написано что пользователь с user_id = 1, это админ. Делате запрос к этой таблице, удостоверяетесь что это админ и дальше показываете юзеру все что положено админу. Соответственно в каждом запросе нужно проверять что это действительно админ.
1
0 / 0 / 0
Регистрация: 20.04.2016
Сообщений: 14
21.05.2018, 22:01  [ТС]
andyyy, кстати да, так наверное и сделаю. Спасибо!
0
55 / 55 / 21
Регистрация: 01.03.2016
Сообщений: 594
21.05.2018, 22:05
Цитата Сообщение от Аполинар Посмотреть сообщение
53ifbb, начал вникать в эту тему. "На данных сессии реализуем логику". А если не секрет, как это делается непосредственно в коде?
логика это конструкция if...
Свой класс управления сессией я дать не могу, можете скачать где нибудь чужой.
Если готовы писать сами то при грубо говоря отправке формы логина нужно установить куки setcookie(аргументы) и записать данные в сессию (просто юзая массив $_COOKIE).
При последующих переходов проверяйте
PHP
1
if($_SESSION['ключ, например: type'] == 'значение, например: admin') тогда ля-ля ...
0
 Аватар для wmysterio
295 / 244 / 128
Регистрация: 24.12.2014
Сообщений: 708
21.05.2018, 22:46
Цитата Сообщение от 53ifbb Посмотреть сообщение
В куках храним логин, пароль.
Ни в коем случае. Такие данные никогда не должны сохранятся на стороне клиента. Даже в $_SESSION пароли сохраняют только в крайнем случае.
Цитата Сообщение от Аполинар Посмотреть сообщение
Я так подозреваю, что нужно юзать сессии и куки, но только не знаю, как именно.
Да, при авторизации в сессиях храните основные данные пользователя и при необходимости ограничить доступ к каким-то данным просто проверяйте значение сессии. Я предпочитаю права для пользователей хранить числом, тогда проще проверить, например так:
PHP
1
2
3
if( $_SESSION["CURRENT_USER"]["GROUP"] > 8 ) {
// выводим что нужно показать, если пользователь имеет права админа
}
Здесь 8 выступает в роли модератора, а для админа я устанавливаю 9. Тогда согласно условию, данные будут показываться только тому, у кого больше прав, чем у модератора. В моём случае - это админ. В куках я обычно сохраняю только id пользователя, и 2 хеша (можно и один). Это нужно для автоматической авторизации. Если сессии нет, то тащим с бд хеши пользователя и другие данные, взяв с куки id. Если те совпадают,то заполняем значения сессии. Последнее делать не обязательно, но тогда пользователю нужно будет процесс авторизации заново.

К сожалению, толковой современной литературы найти сложно. Сплошь и рядом только древние примеры, которые новичкам ( да и не только ) больше во вред. Там в основном учат вставлять к HTML куски PHP, а не наоборот ) В общем если ищите литературу к этой теме, то ищите что-то, что не старше 1-2 лет, максимум 3.
0
55 / 55 / 21
Регистрация: 01.03.2016
Сообщений: 594
21.05.2018, 22:52
Цитата Сообщение от wmysterio Посмотреть сообщение
Ни в коем случае. Такие данные никогда не должны сохранятся на стороне клиента. Даже в $_SESSION пароли сохраняют только в крайнем случае.
У меня пользователь должен передать открытый логин, хеш пароля и номер сессии. В самой сессии идет проверка и Ip и юзер агент - это для админа, для пользователя ip можно не проверять.
а вы, что предлагаете передавать от клиента ?)
0
 Аватар для wmysterio
295 / 244 / 128
Регистрация: 24.12.2014
Сообщений: 708
21.05.2018, 22:55
Цитата Сообщение от 53ifbb Посмотреть сообщение
а вы, что предлагаете передавать от клиента
Я написал Выше, что надо передавать. Я говорил Вам то, что сохранять логин и пароль в куки не надо в целях безопасности.
0
55 / 55 / 21
Регистрация: 01.03.2016
Сообщений: 594
21.05.2018, 23:33
wmysterio, логин и индекс сессии - это уникальные данные, основные данные их и нужно хранить. Такая реализация повсюду. Покажите конкретную строку ваших куков.
Вы не раскрываете логику создания Ваших хранимых хешей...

Добавлено через 3 минуты
wmysterio, да и какая разница, что украсть ваши хеши, что хеш пароля с солью ?

Добавлено через 1 минуту
wmysterio, это все не защита. Лучше проверять побочные данные от клиента о которых явно не может знать "хакер" и после нескольких неудач блокировать учетку.
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
22.05.2018, 00:13
53ifbb, для идентификации пользователя достаточно одной рандомной строки (токена), привязанной к пользователю в БД, плюс возможно id пользователя, если токен может быть неуникальным.

Логины, пароли (пусть даже хэши) и прочие подобные вещи хранить в куках смысла нет, только лишние потенциальные уязвимости.

Цитата Сообщение от 53ifbb Посмотреть сообщение
какая разница, что украсть ваши хеши, что хеш пароля с солью ?
Если разницы нет, зачем в этой схеме пароль? Может ещё паспортные данные хешировать?

И вы не учитываете временной фактор. Вчера хэшировать с помощью md5 считалось безопасным, сейчас нет. Завтра нынешние алгоритмы устареют и открытый хэш пароля в куках станет проблемой.
0
 Аватар для wmysterio
295 / 244 / 128
Регистрация: 24.12.2014
Сообщений: 708
22.05.2018, 00:15
Цитата Сообщение от 53ifbb Посмотреть сообщение
Вы не раскрываете логику создания Ваших хранимых хешей...
Да всё там написано, читайте внимательней или хотябы поищите информацию о токенах и для чего их используют.
Цитата Сообщение от 53ifbb Посмотреть сообщение
да и какая разница, что украсть ваши хеши, что хеш пароля с солью ?
Есть разница. Мои хеши - это случайный набор символов, а не хеширванный пароль. В случае кражи, атакующий должен ещё знать ещё заведомо не извесные ему данные, таких как IP, Agent и прочее, которые проверяются уже на сервере, поэтому Пароли, IP и прочие конфиденциальные данные не сохраняют в куки. Токены периодически обновляются ( каждый сам решает как часто ), и в случаи кражи он получит уже неактуальные данные.
Цитата Сообщение от 53ifbb Посмотреть сообщение
это все не защита.
Смотря что Вы считаете защитой. Скиньте какие-то статьи о Вашем способе авторизации, которая "реализуется повсюду". Я из интереса спрашиваю, если что.
0
 Аватар для Зверушь
461 / 369 / 94
Регистрация: 01.05.2010
Сообщений: 1,761
22.05.2018, 09:35
Цитата Сообщение от wmysterio Посмотреть сообщение
Я предпочитаю права для пользователей хранить числом, тогда проще проверить, например так:
PHP
1
2
3
if( $_SESSION["CURRENT_USER"]["GROUP"] > 8 ) {
// выводим что нужно показать, если пользователь имеет права админа
}
Здесь 8 выступает в роли модератора, а для админа я устанавливаю 9.
Это хорошее решение, но "магические цифры" лучше не использовать. А то потом долго-долго кто-то будет гадать, что за роль 8. Тут лучше использовать константы:
PHP
1
2
3
4
5
define('USER_ROLE_MODERATOR', 8); // Теперь мы точно знаем, что 8 - модератор, ведь мы дали ему понятное имя.
// ...
if( $_SESSION["CURRENT_USER"]["GROUP"] > USER_ROLE_MODERATOR ) {
// выводим что нужно показать, если пользователь имеет права админа
}
0
 Аватар для wmysterio
295 / 244 / 128
Регистрация: 24.12.2014
Сообщений: 708
22.05.2018, 09:58
Цитата Сообщение от Зверушь Посмотреть сообщение
Это хорошее решение, но "магические цифры" лучше не использовать. А то потом долго-долго кто-то будет гадать, что за роль 8. Тут лучше использовать константы:
Согласен на 100%. Это только для примера я написал числа, чтобы понятней было. Константы ещё и помогут при разработке больших проектов. Если число изменится, то его нужно будет ещё везде в коде менять, а тут только в объявлении константы. Сам то я использую класс "User", где в нём указаны константы с нужной группой.
0
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
22.05.2018, 17:35
Если администратор только один, достаточно особого значения user_id, как tarasalk написал, например 0 с NO_AUTO_VALUE_ON_ZERO.

Добавлено через 7 минут
Этот же принцип можно использовать и для небольшой, вручную назначаемой группы пользователей, например:
0 - администратор;
1-255 - модераторы;
от 256 - прочие пользователи.
0
71 / 55 / 32
Регистрация: 13.04.2018
Сообщений: 521
22.05.2018, 17:45
Цитата Сообщение от Аполинар Посмотреть сообщение
Доброго времени суток, господа форумчане! Слезно прошу объяснить на пальцах, как должно происходить следующее: допустим, пользователь авторизовался на сайте, его тип учетки, скажем, "юзер", поэтому ему вывелись, к примеру, 2 таблицы с возможностью их просмотра. А второй юзер с типом учетки "админ" вошел в систему и ему доступны 3 таблицы с возможностью их редактирования. Я не прошу за меня это реализовывать, я лишь хочу, чтобы меня наставили на путь истинный. Я так подозреваю, что нужно юзать сессии и куки, но только не знаю, как именно.
я делал так
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<div class = "right_wrap" id = "right_wrap">
                        <div class = "kabinet" id = "kabinet">
                            <div class = "name"><a href = "?edit_log">Изменить логин</a></div>
                            <hr>
                            <div class = "name"><a href = "?edit_pass">Изменить пароль</a></div>
                            <hr>
                            <div class = "name"><a href = "?edit_email">Изменить email</a></div>
                            <hr>
                            <div class = "name" id = "name_protect"><a href = "?dopol_protect">Дополнительная защита</a></div>
                            <hr>
                            <?php if ($prefix->prefix == '[Admin]' || $prefix->prefix == '[Moderator]') {?>
                            <div class = "name"><a href = "?new_article">Добавить статью</a></div>
                            <hr>
                            <div class = "name"><a href = "?edit_article">Изменить статью</a></div>
                            <hr>
                            <?php } ?>
                            <?php if ($prefix->prefix == '[Admin]') {?>
                            <div class = "name"><a href = "?add_promocod">Добавить промокод</a></div>
                            <hr>
                            <?php }?>
                            <div class = "name"><a href = "?log_out">Выйти</a></div>
                            <hr>
                        </div>
                        </div>
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.05.2018, 17:45
Помогаю со студенческими работами здесь

Люди добрые, отзовитесь!
Помогите, пожалуйста решить задание. 1. В базе данных имеются 2 таблицы – Students и Results. В таблице Students столбец ID –...

Помогите люди добрые
Помогите решить задачку. См.ниже

Подскажите люди добрые!
Для начала всем привет! Так вот товарищи, возникла такая заморочка... Придумали в соседнем отделе поставить себе документооборот -...

Люди добрые, подскажите
Помогите пожалуйста найти книгу &quot;Программировать в 1C за 11 шагов&quot; Низамутдинов Ильяс. Буду весьма благодарен. p.s. купить нету...

Добрые люди оцените
Пожалуйста профессионалы оцените данный системный блок. - Процессор i7-2600K - Система охлаждения be quiet! Pure Rock (BK009) -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru