Это плохо использовать механизм по умолчанию PHP сессии?


я Понимаю, что многие frameworks, как Codeigniter и Laravel 3 и 4 используют собственный механизм хранения данных сеанса. Они не используют стандартный механизм PHP (Переменная $_SESSION и session_start, между прочим).

И когда я говорю "механизм собственного" я говорю не изменить поведение сеанса PHP с помощью интерфейса SessionHandler и session_set_save_handler, но я говорю о работе с механизмом для создания сеанса, не используя никаких функций (уже готовы) PHP.

Хотел бы знать, если есть что-то плохое с механизмом, по умолчанию PHP сессии?

Есть ли ограничения на вход в машинном коде PHP, чтобы frameworks используют другой способ реализовать сессии?

 12
Author: Maniero, 2016-01-26

2 answers

Как функции необходимо, чтобы понять его полностью, чтение всей документации, и в конечном итоге найти информацию не описаны. Что-то сложно, как это может иметь ряд деталей, которые могут пройти desapercebidos. Я не буду пытаться разместить все, что должно быть проверено, потому что я не эксперт в теме, и я думаю, что не подходит, мое намерение состоит не в том, чтобы дать однозначный ответ.

Главная причина - frameworks обеспечивать собственные механизмы для любого технологии-это ключевой ресурс.

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

Одним из самых больших преимуществ абстракции в том, что если это сделано хорошо вы можете обменять реализация не требует коды, которые используют его будут изменены. Это очень важно в различных ситуациях. Не всегда удается сделать правильно, почему лучше быть программистом. И не всегда сложность абстракции, который необходим, стоит усилий.

, То интересно, что эти продукты имеют, таким образом, что, по крайней мере, не быть в зависимости от по умолчанию PHP.

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

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

Как было сказано в комментариях, на тот факт создания собственной версии, не хочет сказать, что будет лучше. Еще, что намерения этих frameworks на то, чтобы облегчить использование ресурсов в отношении того, что существует в PHP. Может быть, попытка сделать что-то лучше, оставил бы слишком сложными.

Большинство проблем, которые я вижу с помощью сеанса по умолчанию связано с неправильно использовать. Ладно, может быть немного сложно сделать правильно, но это обязанность программиста знаю, как это сделать это. И frameworks, придется выбирать между облегчения или дать более мощный и гибкий. То, что я вижу, они делают это очень применять такие хорошие практики, то есть они определяют, что хорошо для вас, даже если это не лучшее всегда.

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

Хотел бы знать, если есть что-то плохое с механизмом, по умолчанию PHP сессии?

Если бы это было так хлопотно было бы довольно рекомендация не использовать, кто-то уже сделал бы замену в PHP. Это хорошо, что здесь, но проблема не в функции, в pecinha между клавиатурой и стулом :)

 5
Author: Maniero, 2020-10-14 10:53:05

Зависит. Использование sessions по умолчанию PHP не отображает проблемы в общем виде, однако он может быть плохим в зависимости от того, как используется. В save handler по умолчанию использует файлы, так в каждом request получили, даже с вами не с помощью сеанса в некоторых, будет катиться lock сессии файлов и последующего их читать, это может представлять накладные актуальна, если у вас есть количество на самом деле большой - requests.

Другой нюанс в том, что, как я уже сказал, сделать request генерирует lock в файле сеанса, чей путь по умолчанию-это что-то вроде /var/lib/php/session/sess_$identifier), так что любые requests конкурентов придется ждать освободиться lock, чтобы они могли действовать. lock начинается session_start() и заканчивается в целях выполнения вашего сценария, или в вызове session_write_close(), таким образом, если у вас ситуация клиент сделать несколько AJAX - requests проследить, чтобы сервер все эти requests вступают в очереди, надеясь, что дошел до снятия блокировки файл сеанса, и это действительно плохо. Идеально, чтобы минимизировать эту проблему, чтобы всегда использовать session_write_close() и как можно ближе начала сессии, в противном случае requests конкурентов придется ждать окончания выполнения сценария, который прибыл первым, что может означать удар в операции (чтение файлы, получить доступ к database, обработать вещи и так далее).

, еще Одна проблема, которая, кажется, занять несколько frameworks избегать использования sessions по умолчанию в PHP-это то, что session_start(), так что полагаться, всегда отправляет " cookie сеанса для клиента. Проблема здесь связана с описанной в предыдущем пункте, вы хотите, чтобы закрыть сеанс как можно скорее после открытия, она, однако, может быть, вы хотите что-то сделать, как написать что-то в сеансе в чтобы PHP сценария и в случае, если он уже закрыт, она понадобится вновь. В этой ситуации у вас есть проблема, что, вероятно, получите сообщение об ошибке, подобное Headers already sent ибо в HTTP-заголовка всегда, отправленные до содержимого, и на стадии позднего его сценария это, скорее всего, вы уже закончили отправку заголовка и начал посылать содержимого и вызова session_start() постараемся отправить несколько заголовков ( " cookie).

Для того, чтобы мы этот вопрос уже комментарии в ответ Maniero, что, хотя это так абстрактно, что для вас, чтобы носить ее на 90% вопросов и концептуальных программирования (hah-это zoeira в ответ, это хорошо ;) ), хорошо объясняет тот факт, что вы часто хотите большего контроля, чем тот, данное реализации родом, или хотите иметь доступ к абстракции другой, или хотите что-то более гибкое, или все еще хотите, реализация которого работа будет легче понять (что знать, что катится под капотом, без "волшебный").

 3
Author: BrunoRB, 2019-09-13 15:22:48