Команда разработчиков

danforth
На сайте с 18.12.2015
Offline
153
#91
iworkshop:
Auth::start(); и Auth::authentication(); -> Запускают сессию и проверяют есть ли у пользователя права для доступа.

Так лучше не делать. Сессию нужно запускать тогда, когда она действительна нужна (например, запрос с действием).

ArbNet,

http://arbnet.ru/shop/main

А тут будете мёрч с логотипами arbnet продавать?))

Пилите свой фреймворк и никого не слушайте. Другим от него профита не будет скорее всего, но вы многое для себя поймете (включая то, что вам тут говорят). Я уже не раз говорил, пока сам не напишешь сотни своих поделок, никаких выводов не сделаешь. Чужие шишки не работают, человек всегда учится только на своих ошибках.

Можно долго делать проектики на фреймворках, напрочь забыв как работают роутеры, почему в хороших роутерах используются деревья радикса (а не хеш таблицы и не бинарные деревья), и т.д.. Может показаться, мол, зачем это делать, все уже написано до нас. Импульсы в мозгу ходят от нейронов к нейронам по протоптанным тропам, не задействуя остальные части мозга, когда применяется сфокусированное мышление. Делая что-то не привычное для мозга, например пойти новой дорогой, освоить новое дело, приготовить еду (если никогда её не готовил), написать свой роутер (желательно эффективный и гибкий) - это все дает мозгу неплохую встряску. Благодаря такому подходу, после рыбалки например, или какого-то активного отдыха, часто приходят очень хорошие идеи или мысли для решения какой-либо проблемы.

Junior Web Developer
iworkshop
На сайте с 22.12.2008
Offline
195
#92
Aisamiery:
iworkshop, суть этого проекта - не использовать ничего готового, это его "фишка". Вам нужен phpunit - напишите свой =)))

К такому жизнь меня не готовила))

---------- Добавлено 14.03.2020 в 23:24 ----------

danforth:
Так лучше не делать. Сессию нужно запускать тогда, когда она действительна нужна (например, запрос с действием).

А почему? Собственно метод старт у меня прост как 5 копеек:

 public static function start()
{
session_start();
}

Мне же нужно как то определять залогенный у меня пользователь или нет.

У тестового бложика есть разные уровни доступа у пользователей и "админка". Авторизация - через сессию. Есть меню, где залогенные пользователи видят доступ к "админке"(как громко сказано) ). Получается мне сессия нужна на каждой странице(иначе как я узнаю, что ко мне пришёл залогенный пользователь и покажу ему меню "админка"?).

Вся логика доступа у меня в методе идентификации

Пытался вставить сюда, но код побило цифрами, видимо идёт подстановка чтобы ничего не подсмотрели у пользователя)

Суть простая, Проверяются иссетом куки, если куки есть(а в куки у меня пишется при "запомнить меня" при авторизации) то идёт проверка в БД на совпадение айпишника\хеша(ну, проверка от подмены)\совпадения хеша из бд и id пользователя(я от щедрот душевных и его к хешу присобачил вперемешку с некоторыми символами). Если всё ок - данные переносятся в сессию -> пользователь залоген. Тут конечно надо ещё доработать и всё вылизать, но как учебный пример сойдёт.

И опять же, с учётом того, что у меня на каждой странице сайта(даже с "фронта") есть меню админка(которое видят только авторизированные пользователи) мне везде нужно стартовать сессию...Нет можно конечно вызывать Auth::start(); и Auth::authentication(); только в некоторых методах...но это действительно того стоит? Придётся носиться с методами, прописывать в каждом методе контроллера админки этот вызов...а потом я допустим комменты прикручу к бложику и мне придётся даже с фронта прикручивать эти методы.

В общем или я чего то не понимаю и не знаю, или вы просто подумали о другой реализации аутентификации.

XMLRiver - прямая выдача Google и Яндекс через API
edogs software
На сайте с 15.12.2005
Offline
775
#93
ArbNet:
edogs, хорошее замечание. Вот именно для ускорения создания сайтов я и делаю свой инструмент и чтобы он был ещё доступнее(проще в освоении, в доке будут наглядные примеры) существующих фреймворков и конструкторов.

Это общие слова, которые Вы можете найти на любом сайте о цмс, нечто вроде мема "молодая динамично развивающаяся компания". Без конкретики это не взлетит.

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
Sly32
На сайте с 29.03.2012
Offline
303
#94
danforth:
Сессию нужно запускать тогда, когда она действительна нужна (например, запрос с действием).

А в пхп есть декораторы?

danforth:
почему в хороших роутерах используются деревья радикса

И здесь джанга рулит)

danforth
На сайте с 18.12.2015
Offline
153
#95
iworkshop:
А почему? Собственно метод старт у меня прост как 5 копеек:

Ну хотя бы просто потому, что зачем запускать сессию, если пользователь не авторизован (правильнее говорить не аутентифицирован, но в данном случае пусть будет уже так)? Есть session_status для определения есть ли для конкретного пользователя сессия. Если сессии нет, то вероятно он не авторизован. Запуская каждый раз сессию, nginx не сможет отличить авторизованных пользователей от гостей, т.к. вы будете постоянно присваивать куки PHPSESSID, а кешировать ответ с чьей-то кукой нельзя. Убрав и без того не нужную инициализацию сессии для неавторизованных пользователей, можно будет беспроблемно кешировать ваши ответы от PHP.

iworkshop:
Нет можно конечно вызывать Auth::start(); и Auth::authentication(); только в некоторых методах...но это действительно того стоит? Придётся носиться с методами, прописывать в каждом методе контроллера админки этот вызов...

Можно сделать ленивую инициализацию сессий. А вообще, аутентификацию лучше делать в миддлвари, и если юзер аутентифицирован, то передавать данные о нем в следующий хендлер, чтобы он читал не из глобального стейта данные, а из входящих параметров. Любой глобальный стейт лучше избегать по возможности.

Этот вызов можно заменить на:


public static function start()
{
if (session_status() === PHP_SESSION_ACTIVE) {
session_start();
}
}

А на странице аутентификации после успешного входа ручками вызвать session_start (а ещё лучше сделать враппер через статический метод на том же классе, который у вас уже есть).

И скорее всего, все будет хорошо.

iworkshop
На сайте с 22.12.2008
Offline
195
#96

danforth, об этом я не думал.

Спасибо, изучу вопрос, потестирую)

T7
На сайте с 19.09.2018
Offline
63
#97
iworkshop:
Auth::start(); и Auth::authentication(); -> Запускают сессию и проверяют есть ли у пользователя права для доступа.
danforth:
Так лучше не делать. Сессию нужно запускать тогда, когда она действительна нужна (например, запрос с действием).

Как и любое действие. Коннектиться к БД, если это в итоге не потребуется плохо.

foreach ($fn_list as $file) {

require($config['dir']['functions'] . $file);
}
и это плохо.
ArbNet:
пишется с ноля без прикручивания других фреймворков и тд

Это то понятно, если спарсить эксель понадобится, напишем - 100 верст не круг. Только, что то, так и не понял, зачем XML. В итоге все равно объект/массив. Может, в файл, монгу или др. носкуэл положить. 🍿

IL
На сайте с 20.04.2007
Offline
435
#98
danforth:
Убрав и без того не нужную инициализацию сессии для неавторизованных пользователей, можно будет беспроблемно кешировать ваши ответы от PHP.

Иногда сессия нужна и для неавторизованного пользователя

- просмотренные страницы (товары) /"вы смотрели", "возможно, Вас заинтересует" и тд/

- товары в корзине

- избранное (в т.ч. и без авторизации.. можно, конечно, куками обойтись.. но)

- информация о предыдущих входах (и такое бывает)

iworkshop:
****Auth::authentication();
****Router::start();
iworkshop:
и проверяют есть ли у пользователя права для доступа.

Т.е. права проверяются ещё до роутера? А как быть с разграничением прав на отдельные контроллеры и/или action-ы? По идее, до Router-а ни тот, ни другой ещё не определены?

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
Sly32
На сайте с 29.03.2012
Offline
303
#99
ivan-lev:
Иногда сессия нужна и для неавторизованного пользователя

соглашусь. Вот для такого в джанге и есть анонимусюзер. А вообще все вопросы разграничения решаются миддлварями и декораторами очень просто

---------- Добавлено 15.03.2020 в 11:10 ----------

danforth:
Другим от него профита не будет скорее всего, но вы многое для себя поймете

Вообще не факт. Можно долбиться в закрытую дверь

, а можно просто почитать для начала как это правильно делать и улучшить, если видишь как. А наш ТС скоро новый пхп начнет писать...

danforth
На сайте с 18.12.2015
Offline
153
#100
ivan-lev:
- просмотренные страницы (товары) /"вы смотрели", "возможно, Вас заинтересует" и тд/
- товары в корзине
- избранное (в т.ч. и без авторизации.. можно, конечно, куками обойтись.. но)
- информация о предыдущих входах (и такое бывает)

Ну если закрыть глаза на то, что человек выше пишет блог, а не интернет-магазин, то:

ivan-lev:
- просмотренные страницы (товары) /"вы смотрели", "возможно, Вас заинтересует" и тд/

для аутентифицированных - в базу, для не авторизованных - в клиентскую куку, подгружать динамически при попадании в область видимости (через Intersection Observer API например)

ivan-lev:
- товары в корзине

для аутентифицированных - в базу (чтобы можно было бы набрать корзину дома, а оформить с мобилы в пробке или метро), а для неаутентифицированных - придеться начать сессию. Но это можно сделать после добавления первого товара, а не сразу. При этом саму информацию о корзине (которая обычно выводится в правом верхнем углу) можно так же получать по публичному API.

ivan-lev:
- избранное (в т.ч. и без авторизации.. можно, конечно, куками обойтись.. но)

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

Вообще, не стоит создавать инстанс того, в чем нет необходимости, будь то кука, файловый дескриптор, коннект, etc.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий