Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2019, 11:23   #1
volni
Форумчанин
 
Регистрация: 16.03.2019
Сообщений: 188
По умолчанию Авторизация в php

Здравствуйте, возник такой вопрос,
Я делаю авторизацию в базе данных, метод авторизации выбран следующий: в бд будет таблица групп пользователей (ид, что может делать) и таблица пользователей ( логин,пароль, ид группы), то есть на прямую пользователи в бд задаваться не будут.
Вопрос в реализации этого: как я это понимаю, я подключаюсь к бд через phpзапрос и в подключении, где логин и пароль мне указывать логин и пароль от рута, а потом ограничивать html формы разными php условиями, которые характерны для пользователей?
Верно ли я понял?)
Спасибо за внимание, надеюсь доступно объяснил свои мысли=)
volni вне форума Ответить с цитированием
Старый 03.10.2019, 11:36   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от volni Посмотреть сообщение
Вопрос в реализации этого: как я это понимаю, я подключаюсь к бд через phpзапрос и в подключении, где логин и пароль мне указывать логин и пароль от рута, а потом ограничивать html формы разными php условиями, которые характерны для пользователей?
Верно ли я понял?)
да, вполне можно делать так. Все запросы на сервере выполняются от root.
а результаты запросов уже зависят от того, что доступно пользователю.

p.s. не забудьте о том, что переданные пользователем данные для авторизации (логин и пароль) ОБЯЗАТЕЛЬНО нужно обрабатывать перед использованием.

p.p.s. пароль в базе не хранится, там нужно хранить хэш от пароля.
см. PHP: Хеширование паролей - Manual
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.10.2019, 15:48   #3
volni
Форумчанин
 
Регистрация: 16.03.2019
Сообщений: 188
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
да, вполне можно делать так. Все запросы на сервере выполняются от root.
а результаты запросов уже зависят от того, что доступно пользователю.

p.s. не забудьте о том, что переданные пользователем данные для авторизации (логин и пароль) ОБЯЗАТЕЛЬНО нужно обрабатывать перед использованием.

p.p.s. пароль в базе не хранится, там нужно хранить хэш от пароля.
см. PHP: Хеширование паролей - Manual
Спасибо, а еще такой вопрос возник, соединение с базой(mysqli_connect) лучше делать на каждой php странице, где присутствуют запросы в бд?
Просто мне кажется, это как-то не очень. Но в то же время я не знаю, как сделать по другому, т.к. не знаю, на какой странице поставить mysqli_close, ведь пользователь может в любой момент закрыть сайт.
volni вне форума Ответить с цитированием
Старый 03.10.2019, 16:06   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

ой-ё-ёй...
срочно читать Самые основы. Как работает PHP.

если кратко.
на каждой странице, где нужно соединение с БД, делайте require или require_once (почитайте, чем они отличаются.
через рекваре грузите файл с коннектом к БД connect.php (имя файла примерное, напишите своё имя файла).


Цитата:
Сообщение от volni Посмотреть сообщение
на какой странице поставить mysqli_close, ведь пользователь может в любой момент закрыть сайт.
в теории - на той же, где получили данные.
открыли соединение, прочитали данные (можно многократные запросы), в конце - закрыли.

впрочем, закрывать не обязательно.
Как только ваш PHP файл закончит работу, то всё система сама закроет и очистит.

отсюда https://www.php.net/manual/ru/mysqli.close.php -
Цитата:
Открытые непостоянные соединения MySQL и результирующие наборы автоматически удаляются сразу по окончании работы PHP скрипта. Следовательно, закрывать соединения и очищать результирующие наборы не обязательно, но рекомендуется, так как это сразу же освободит ресурсы базы данных и память, занимаемую результатами выборки, что может положительно сказаться на производительности. Больше информации можно почерпнуть в разделе Освобождение ресурсов

поймите, что как только ваш код PHP отработал, то он больше не существует.
Недоступны не переменные из этого скрипта, ни открытое соединение, ни HTML код, который он сгенерировал - ничего! Вы обратились к серверу, он открыл ваш PHP файл, выполнил его, отдал Вам результаты в виде HTML кода (конечно, PHP программа может что-то записать вовне (БД, файлы, другие сервера)), закрыл программу и очистил занимаемые ею ресурсы.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.10.2019, 16:33   #5
volni
Форумчанин
 
Регистрация: 16.03.2019
Сообщений: 188
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ой-ё-ёй...
срочно читать Самые основы. Как работает PHP.

если кратко.
на каждой странице, где нужно соединение с БД, делайте require или require_once (почитайте, чем они отличаются.
через рекваре грузите файл с коннектом к БД connect.php (имя файла примерное, напишите своё имя файла).



в теории - на той же, где получили данные.
открыли соединение, прочитали данные (можно многократные запросы), в конце - закрыли.

впрочем, закрывать не обязательно.
Как только ваш PHP файл закончит работу, то всё система сама закроет и очистит.

отсюда https://www.php.net/manual/ru/mysqli.close.php -



поймите, что как только ваш код PHP отработал, то он больше не существует.
Недоступны не переменные из этого скрипта, ни открытое соединение, ни HTML код, который он сгенерировал - ничего! Вы обратились к серверу, он открыл ваш PHP файл, выполнил его, отдал Вам результаты в виде HTML кода (конечно, PHP программа может что-то записать вовне (БД, файлы, другие сервера)), закрыл программу и очистил занимаемые ею ресурсы.
спасибо, сейчас буду читать=)
И крайний вопросик на сегодня, как правильно вставлять сессии в sql запрос?
Код:
$sql = "SELECT name FROM users WHERE user_password='$_SESSION['user_password']'";
Так не работает,в голову лезет только присваивать какой-то локальной переменной и вставлять ее, только так?
volni вне форума Ответить с цитированием
Старый 03.10.2019, 16:36   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

что у вас пароль забыл в сессии?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 03.10.2019, 18:01   #7
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

Читать про sql инъекции!!!
ADSoft вне форума Ответить с цитированием
Старый 04.10.2019, 02:57   #8
Spoilt
Пользователь
 
Регистрация: 31.01.2019
Сообщений: 11
По умолчанию

Используйте лучше PDO для работы с базой.

И да, пароль пользователя в сессии, ему явно там не место. Попутно с sql инъекции, почитайте про post и get передачу данных. Собственно у вас должен получится примерно такой лог. Пользователь отправил пароль post, отловили его на сервере, пропустили через фильтр, отправили на шифрование, хэш записали в базу, так же слепили хэш для идентификации пользователя можно в куку отдать. В сессию отправили какой то флаг что пользователь true. И на каждой странице проверять, пользователь true или false ) Ну и соответственно если пользователь false вытягивать из куки идентификатор и проверять, сходятся они или нет. Тот что в куке и где то в базе. Если они сходятся, старый идентификатор затирать и выдавать новый. Хотя можно на каждой странице менять идентификатор. Наверное... И обязательно почитайте про PDO.

Последний раз редактировалось Alex11223; 04.10.2019 в 08:15.
Spoilt вне форума Ответить с цитированием
Старый 04.10.2019, 08:17   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от Spoilt Посмотреть сообщение
отправили на шифрование, хэш записали
так на шифрование или хэширование?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 04.10.2019, 12:08   #10
volni
Форумчанин
 
Регистрация: 16.03.2019
Сообщений: 188
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
что у вас пароль забыл в сессии?
да не будет его там, я просто тестил смогу ли я так сделать, как написал, и просто выбрал рандомное поле)

Цитата:
Сообщение от ADSoft Посмотреть сообщение
Читать про sql инъекции!!!
хорошо,спасибо=)
volni вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Авторизация вк oteccc Работа с сетью в Delphi 5 13.04.2014 13:45
C# Авторизация rule-z C# (си шарп) 3 16.08.2012 13:37
Авторизация mike5703 PHP 9 26.03.2012 22:02
Обычная авторизация или авторизация на уровне браузера? calugin Безопасность, Шифрование 0 13.01.2011 00:34
Авторизация doniyor JavaScript, Ajax 1 07.11.2009 21:13