Доступ к переменной сеанса внутри класса

#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 объекта.