У меня есть переменная сеанса, которая была инициирована в index.php.
<?php
$sid = session_id();
if (empty($sid) {
session_start();
}
//value of the variable can be changed and saved before coming back to the index
if (!isset($_SESSION['context'])){
$_SESSION['context'] = 1;
}
//...
?>
Позже сценарий используется для создания или обновления записи в базе данных.
entryupdate.php:
<?php
include_once("template.php");
/*....*/
$sid = session_id();
if (empty($sid)) {
session_start();
}
/*....*/
//Create a new entry, context is not given in the $input_object at this point.
$template = new Template($input_object);
$context = $template->getContext();
?>
template.php - это сценарий, в котором определен только объект шаблона, поэтому я не называю в нем $session_start, мое объяснение состоит в том, что он всегда будет вызываться сценариями, включая его, как в случае, который я здесь описываю. Вот соответствующий код:
<?php
class Template
{
private $m_context;
//other private parameters
function __construct($arguments_object){
if (!is_null($arguments_object)){
/*....*/
$this->m_context = $arguments_object->context;
/*....*/
}
}
/*....*/
function getContext(){
if (!empty($this->m_context)){
return $this->m_context;
}else{
//this would be our case, as the parameter was not initialized yet.
return $_SESSION['context'];
}
}
/*....*/
}
?>
Теперь мой коллега обнаружил ошибку, и в результате расследования я обнаружил, что $context был настроен на NULL. Когда я попытался воспроизвести проблему, контекст был правильно инициализирован. И, честно говоря, за несколько лет использования этого инструмента это первый раз, когда проблема такого рода возникла.
Я также проверил, ни в коем случае не сбрасываю эту конкретную переменную сеанса.
Делаю ли я здесь ложное предположение, полагая, что template.php найдет переменную сеанса при запуске сеанса в entryupdate.php, где она была включена и использована?





