|
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
|
||||||
Авторизация с сессией , php+mysql , session_start08.07.2019, 22:15. Показов 10665. Ответов 16
Привет всем! Вспоминаю PHP в связи с началом программирования под Android. Написал несколько страниц по выборке, редактированию данных в формате JSON. Все работает. На стороне файла db_connect.php стоит временная заглушка, где логин, пароль,хост и база вшита уже.(для тестирования). К нему идет подключение из всех страниц с CRUD и в общем то в тесте все работает как надо.
На стороне сервера MySql используется родная авторизация, с прописанными ролями ,триггерами, функциями (то есть без дополнительных велосипедов в виде таблицы users и проч.) И тоже все работает как надо. Формат работы с php+mysql: точечное соединение/запрос/закрытие соединения. Пароль и логин храниться в классе Java на android (не в инет браузере, а в приватном классе скомпилированного приложения в sndroid. И то только ,если пароль и логин успешный. ). Никаких куков, сессий нет. То есть порядок следующий - подключился/ запросил/отключился. Но вопрос в общем то назрел, не в разрезе android, а в разрезе PHP, давно хотел дожать. Смотрите, есть небольшой код авторизации на PHP, написал ради теста. Код простой. Я написал простую форму авторизации. Подскажите пожалуйста, как правильно использовать сессию $_SESSION, чтобы после ввода правильного логина и пароля уже юзать в дальнейшем только сессию? Код авторизации чуть ниже и он прост.
help)
0
|
||||||
| 08.07.2019, 22:15 | |
|
Ответы с готовыми решениями:
16
session_start(); [PHP регистрация и авторизация] авторизация, трабл с сессией Авторизация php mysql |
|
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
|
||||||||||||
| 08.07.2019, 22:27 | ||||||||||||
0
|
||||||||||||
|
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
|
|
| 08.07.2019, 23:19 [ТС] | |
|
Спасибо за царский подгон!
![]() Но я чет в родном mysql не вижу таблицы users)) Есть только таблица user. Еще раз говорю , что у меня родная аутентификация на сервере, под родной интерфейс mysql Без создания дополнительной таблицы users.Добавлено через 33 минуты Так то при наличии дополнительно созданной таблицы users, с любезно созданными полями user,pasword и полем хранящем ид сессии любой может запросить и сверить idшник сессии.) Кто может справиться с mysql_native_password в разрезе сессии? То есть с хранением сессии при нативной защите MySQL? Без велосипеда в виде дополнительно созданной таблицы users?
0
|
|
|
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
|
|||||||||
| 08.07.2019, 23:20 | |||||||||
Или я вообще не понял что такое:
1
|
|||||||||
|
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
|
||
| 08.07.2019, 23:34 [ТС] | ||
|
Да
Там есть основные поля, логин, хост и пароль. Пароль естественно зашифрован, и называется даже не паролем, а authentification string. Там дичь вида 1B84707ав.D5C041B84707ывыв1B84707. В общем это взрослая аутентификация. Настоящая. ИМХО наверное сессию при использовании родной защитой MYSQL из коробки не поднять. (точней ей никак не возпользоваться.) Спасибо за пример , сейчас потестю, Может как то юзануть и получиться!
0
|
||
|
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
|
|
| 08.07.2019, 23:35 | |
|
Сергей1980, только нужно учитывать, что данные, которые вы записываете в сессию, хранятся в открытом виде в текстовых файликах на сервере. Это не критично, но более надёжный вариант - отдельная таблица user/users, где вместо пароля хранится его хеш.
1
|
|
|
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
|
||
| 09.07.2019, 00:13 [ТС] | ||
|
Я давно ничего не писал на PHP, знания посредственные. Но по сравнению с той же java, язык дружелюбный и понятный. Особых опасений хранить логин и пароль (после успешного подключения естественно-верный логин и пароль, и на время работы андроид приложения) в классе java нет. Там хрен сломаешь, если только кто то вирусов напустит на телефон, типа пунто свитчера)) Практикую точечные запросы к серверу, без всяких куков и сессий, ничего нигде не хранится, кроме логина и пароля в приватном классе андроид приложения. Но такая методика в PHP+MySQL для браузерного варианта приложения вижу не работает без велосипедов((. По сути $_SESSION, $_SERVER и прочие это глобальные переменные, которые можно угнать. Сколько не соли их(( А можно в PHP в качестве глобальной переменной хранить объект типа Connection? и обращаться к нему при необходимости? C ООП на этом уровне проблем нет, может класс какойнить есть по данному примеру?
0
|
||
|
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
|
|||||
| 09.07.2019, 01:04 | |||||
Сообщение было отмечено Сергей1980 как решение
РешениеПользователь сайта - это всё таки другая сущность, нежели пользователь базы данных, у него другое предназначение. К примеру, если у нас есть интернет-магазин, мы можем каждый день создавать сотни новых пользователей, но все они будут работать под одним и тем же пользователем СУБД. Потому что у всех у них должны быть одни и те же права в рамках СУБД, но у них могут быть различия в рамках самого приложения (размер скидки, например). ![]() ![]() Если вы говорите именно про PHPшные глобальные переменные - то можно, но лучше подойдёт паттерн Синглтон. Он простой, в сети есть куча примеров.
1
|
|||||
|
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
|
||||||||||||||||
| 09.07.2019, 17:51 [ТС] | ||||||||||||||||
|
Алгоритм работы сессии стал понятен. Мне было ценно понять, как вообще работает сессия. Оказывается там можно хранить вообще все что угодно, и в рамках id её тягать оттуда ,то что ты записал туда. Еще раз спасибо! Как понимаю, вот так делать не надо с позиции безопасности? ![]() else{ $_SESSION['login'] = $log; $_SESSION['pass'] = $pass; } Добавлено через 51 минуту FOR JODAN: PHP: Кликните здесь для просмотра всего текста
А вот Java: Кликните здесь для просмотра всего текста
Смысл понятен, метод класса возвращает объект "соединение с БД", если старого нет, или оно умерло. Кстати в java припилен дополнительно метод syncronized в моем примере, который под подключение вызывает отдельный поток ,который не тормозит выполнение другого кода программы. И ускоряет работу приложения. В PHP наверное тоже можно.
0
|
||||||||||||||||
|
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
|
|||||
| 09.07.2019, 19:16 | |||||
|
Отсюда другой нюанс: ![]()
1
|
|||||
|
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
|
||
| 09.07.2019, 20:01 [ТС] | ||
|
Эти все вопросы по топику у меня появились, когда я захотел сделать веб интерфейс для моей базы, которая крутится на mySql
На стороне клиента 2 варианта: 1) Клиент на Андроид - юзает сервер /базу через Retrofit, все Ок. 2) Клиент на MS Access юзает напрямую mySql через ODBC, все Ок. 3) Судорожно вспоминаю PHP с позиции как грамотно организовать авторизацию, защищенную)) Решил написать морду на HTML+JS+PHP+MySQL.
0
|
||
|
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
|
|
| 09.07.2019, 20:04 | |
|
Сергей1980, а какая перед вами стоит задача?
0
|
|
|
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
|
|||||||
| 09.07.2019, 20:18 [ТС] | |||||||
|
1) пользователь заходит на сайт, вводит логин и пароль (авторизация native MySql) . При успешном вводе логина и пароля устанавливается подключение с базой. (Ваш пример с синглтоном и PDO отличнейший!) 2) В рамках созданного успешного соединения появляется возможность использовать SELECT/UPDATE/INSERT/DELETE в рамках своей роли (у меня это все реализовано уже). Ну то есть оформить синглтон в виде отдельного файла, типа connect.php а потом отовсюду его дергать:
Если он что то выдает , то соответственно выборка пойдет. А если нет, то просто запрос/ы не выполнятся.
0
|
|||||||
|
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
|
|
| 09.07.2019, 22:12 | |
|
Сергей1980, понятно.
Проблема в том, что PHP скрипт запускается и умирает при каждом http-запросе. Нельзя создать объект PDO и сохранить его куда-то, чтобы он был доступен сразу в нескольких http-запросах. При каждом запросе мы создаём новый объект PDO. Сессии или куки в любом случае нужны, поскольку позволяют идентифицировать пользователя между http-запросами. В общем, наиболее распространённое решение - создаём таблицу users, в которой есть как минимум id | login | password. И при успешной авторизации сохраняем id юзера в сессию. Тогда никаких логинов и паролей в сессии хранить не нужно. В PDO для всех прописываем одни и те же реквизиты доступа. Если хотите использовать ваш подход, в котором пользователь сайта == пользователь базы, тогда, видимо, придётся хранить логин и пароль в сессии, поскольку в каждом http-запросе вам потребуется подставлять их в PDO.
1
|
|
|
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
|
|||
| 10.07.2019, 00:03 [ТС] | |||
|
Ясно, спасибо, а как к примеру настроить сессию таким образом, чтобы если нет никакой активности пользователя к примеру 3 минуты она автоматом ликвидировалась . И при закрытии браузера соответственно тоже ликвидировалась автоматом. Добавлено через 26 минут Надо еще по ходу будет сделать отсечки по IP адресу, включить список адресов, с которых можно будет работать пользователю. Думаю это устранит большинство проблем с безопасностью.
0
|
|||
|
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
|
|||
| 10.07.2019, 15:02 | |||
1
|
|||
|
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
|
|
| 12.07.2019, 00:13 [ТС] | |
|
Спасибо!
C chrome конечно пришлось повозиться, убрать галочку в настройках хрома можно конечно, но юзеров всех кто работает на хром не заставить же залазить в хром и проставлять в чекбоксе отменить автосохранение ) Как раз при помощи установки времени жизни сессии и удалось решить данный вопрос.
0
|
|
| 12.07.2019, 00:13 | |
|
Помогаю со студенческими работами здесь
17
Авторизация php+mysql
авторизация (php+mysql) регистрация и авторизация на php mysql Авторизация по MySQL через PHP Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|