u4n
Новичок
Странное поведение сессий
Есть такой класс.
и есть такой класс:
Далее в дочернем классе PromoBookMapper класса ItemMapper реализуется такой метод:
В сессию записывается правильное значение, т.е. сначала из метода getNextFirstElement() класса PromoBookMapper возвращается 0, а в сессию пишется $_SESSION['element'] = 1; Но если нажимаю F5, то из сессии в переменную $firstElement записывается значение 2 (вместо ожидаемой 1) и возвращается из метода. Соответственно в сессию уже пишется 3, вместо ожидаемых 2.
Если запускаю скриптец, а потом дописываю такое условие else
нажимаю F5, то выводится 1 (что правильно), все останавливается и все зашибись. Если exit не ставить, т.е. продолжить нормальное выполнение, то выводится 2.
Я понимаю, что где-то я налопатил чего-то не того. Но я уже 2 дня с этой херью бьюсь. Причем буквально 2 дня назад все работало как часы. Никаких изменений с этими классами не производилось. Метод вызывается один раз. Но проблема есть и отловить ее у меня не получается. Может кто-то ткнет носом, в каком направлении копать и где я накосячил? Или хотя бы как грамотно все это дело подебажить?
Версия PHP 5.2.10, Apache 1.3.34 (win)
Есть такой класс.
PHP:
class Session {
public function __construct($sessionId = "") {
if (!empty($sessionId)) {
session_id($sessionId);
}
if (session_id() == "") {
session_start();
}
}
public function setParameter($name, $value) {
if (is_string($value)) {
$_SESSION[$name] = trim(strip_tags($value));
} else {
$_SESSION[$name] = $value;
}
}
public function getParameter($name) {
if (isset($_SESSION[$name])) {
return $_SESSION[$name];
}
return;
}
...
}
PHP:
abstract class ItemMapper ... {
protected
$maxElements,
$viewElements,
$storeVariable;
...
protected function getNextFirstElement() {
$session = new Session();
$firstElement = (int)$session->getParameter($this->storeVariable);
if (empty($firstElement) ||
$firstElement > ($this->maxElements - $this->viewElements)) {
$firstElement = 0;
}
$session->setParameter($this->storeVariable, $firstElement + 1);
return $firstElement;
}
}
PHP:
class PromoBookMapper extends ItemMapper {
public function __construct(...) {
...
$this->maxElements = 8;
$this->viewElements = 4;
$this->storeVariable = "element";
}
public function findList($section) {
...
$test = $this->getFindListString($section);
...
}
protected function getFindListString($section) {
...
$test = $this->getNextFirstElement();
...
}
}
Если запускаю скриптец, а потом дописываю такое условие else
PHP:
if (empty($firstElement) || $firstElement > ($this->maxElements - $this->viewElements)) {
$firstElement = 0;
} else {
print $firstElement;
exit;
}
Я понимаю, что где-то я налопатил чего-то не того. Но я уже 2 дня с этой херью бьюсь. Причем буквально 2 дня назад все работало как часы. Никаких изменений с этими классами не производилось. Метод вызывается один раз. Но проблема есть и отловить ее у меня не получается. Может кто-то ткнет носом, в каком направлении копать и где я накосячил? Или хотя бы как грамотно все это дело подебажить?
Версия PHP 5.2.10, Apache 1.3.34 (win)


