#php #session #variables
#php #сессия #переменные
Вопрос:
Считается ли нормальным использование session_start в конструкторе класса, когда необходимо извлечь или сохранить значения сеанса? Лучшие практики?
Переменная сеанса не может быть извлечена из класса, если session_start не вызывается из __construct.
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();
Ответ №1:
наилучшей практикой является запуск сеанса из начальной загрузки.
и к самому сеансу, доступ к которому осуществляется через какой-то класс смарт-оболочки (см. ZF для примеров).
Таким образом, вы должны быть на 100% уверены, что у вас не возникнет проблем с заголовком и дублирующих вызовов session_start в вашем коде.
Класс может создаваться много раз / запрос … bootstrap запускается только один раз / запрос.
Ответ №2:
Для доступа к переменным сеанса следует использовать объект-оболочку, который вызывается session_start()
при первом запросе, который он обрабатывает, а затем сохраняет флаг, означающий, что это было сделано, или он вызывает session_start()
просто внутри своего конструктора.
Вы можете использовать одноэлементный шаблон или так называемую инъекцию зависимостей, которая, несмотря на исходное название, просто передает ссылку на $Session
объект (назовите это) каждому объекту, которому это нужно.
Должен существовать только один экземпляр Session
объекта.