Считается ли это нормальным использование session_start в конструкторе класса, когда необходимо получить или сохранить значения сеанса? Лучшие практики?
Переменная сеанса coudn't не извлекается из класса, если session_start не вызван из __contruct.
session_start(); if(isset($_REQUEST['siteid'])){ $siteid = $_REQUEST['siteid']; $_SESSION['siteid'] = $siteid; echo $siteid; }else{ $siteid = ""; } require_once 'common/lib_constant.php'; require_once 'common/database.php'; require_once 'common/common.class.php'; $commonClass = new commonClass();
Лучшей практикой является запуск сеанса из бутстрапа.
и сам сеанс доступа через какой-то класс интеллектуальных оболочек (примеры см. в ZF).
Таким образом, вы должны быть на 100% уверены, что у вас не будет проблем с заголовком и дублирования вызовов session_start в вашем коде.
Класс может быть создан несколько раз / запросить … bootstrap запускается только один раз / запрос.
Вы должны использовать объект-оболочку для доступа к переменным сеанса, который вызывает session_start()
при первом запросе, который он обрабатывает, а затем сохраняет флаг, означающий, что это было сделано, или вызывает session_start()
просто внутри своего конструктора.
Вы можете использовать одноэлементный шаблон или так называемую инъекцию зависимостей, которая, несмотря на исходное имя, просто передает ссылку на объект (вызов) $Session
для каждого объекта, который в ней нуждается.
Должен существовать только один экземпляр объекта Session
.