Доступ к переменной сеанса внутри класса - PullRequest
3 голосов
/ 03 мая 2011

Считается ли нормальным использование session_start в конструкторе класса, когда необходимо получить или сохранить значения сеанса?Рекомендации?

Переменная сеанса не может быть извлечена из класса, если не вызывается 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();

Ответы [ 2 ]

3 голосов
/ 04 мая 2011

Лучше всего начинать сеанс с начальной загрузки.
и доступ к самому сеансу через некоторый класс умных оболочек (примеры см. в ZF).
Таким образом, вы должны быть на 100% уверены, что у вас не будет проблем с заголовками и повторяющихся вызовов session_start в вашем коде.
Класс может быть создан много раз / запрос ... начальная загрузка запускается только один раз / запрос.

0 голосов
/ 04 мая 2011

Вы должны использовать объект-оболочку для доступа к переменным сеанса, который вызывает session_start() при первом запросе, который обрабатывает, а затем сохраняет флаг, означающий, что это было сделано, или , который вызывает session_start()просто в своем конструкторе.

Вы можете использовать шаблон синглтона или так называемое внедрение зависимостей , которое, несмотря на оригинальное имя, просто передает ссылку на(назовите его) $Session объект для каждого объекта, который в этом нуждается.

Должен существовать только один экземпляр Session объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...