У меня возникла очень странная проблема с переменными сеанса PHP. Основываясь на идентификаторе сеанса, похоже, что в одном сеансе будут двойные переменные, которые, естественно, невозможны.PHP: аутсинхронные или параллельные массивы переменных сеанса внутри сеанса
Проблема заключается в том, что переменная сеанса «quote» должна оставаться такой же, как и форма на странице, которая перезагружает страницу. Переменная $ _SESSION ['quote'] устанавливается только в том случае, если она не определена, что происходит в первых двух перезагрузках, как показано ниже.
код Debug:
echo "\n Current session id: ".session_id();
echo "\n _SESSION['quote']: ".$_SESSION['quote'];
$_SESSION['counter'] = isset($_SESSION['counter'])? $_SESSION['counter'] +1 : 0;
echo "\n _SESSION['counter']: ".$_SESSION['counter'];
Output when page is reloaded(form submitted):
Current session id: r5i15u4s9e20ud4j6jke8ln376;
$_SESSION['quote']: ;
$_SESSION['counter']: 0;
set _SESSION['quote']: 984;
Current session id: r5i15u4s9e20ud4j6jke8ln376;
$_SESSION['quote']: ;
$_SESSION['counter']: 0;
set _SESSION['quote']: 985;
Current session id: r5i15u4s9e20ud4j6jke8ln376;
$_SESSION['quote']: 985;
$_SESSION['counter']: 1;
Current session id: r5i15u4s9e20ud4j6jke8ln376;
$_SESSION['quote']: 985;
$_SESSION['counter']: 2;
Current session id: r5i15u4s9e20ud4j6jke8ln376;
$_SESSION['quote']: 984;
$_SESSION['counter']: 1;
Current session id: r5i15u4s9e20ud4j6jke8ln376;
$_SESSION['quote']: 985;
$_SESSION['counter']: 3;
Current session id: r5i15u4s9e20ud4j6jke8ln376;
$_SESSION['quote']: 984;
$_SESSION['counter']: 2;
Эта проблема происходит с Firefox и IE. Любые советы или советы будут высоко оценены. Спасибо заранее.
--- EDIT --- Добавлено echo serialize ($ _ SESSION); как было предложено.
<?php session_start();
echo "\nSerialized data at begin of page: ";
echo serialize($_SESSION);
echo "\n Current session id: ".session_id();
echo "\n _SESSION['quote']: ".$_SESSION['quote'];
$_SESSION['counter'] = isset($_SESSION['counter'])? $_SESSION['counter'] +1 : 0;
echo "\n _SESSION['counter']: ".$_SESSION['counter'];
ВЫВОД:
Initial loading of page:
Serialized data at begin of page: a:0:{}
Current session id: vbbpohof2jo757eaj5jrp4dv02
$_SESSION['quote']:
$_SESSION['counter']: 0
...
Serialized data at end of page: a:1:{s:7:"counter";i:0;}
Page 1. reload by form submit:
Serialized data at begin of page: a:0:{}
Current session id: vbbpohof2jo757eaj5jrp4dv02
$_SESSION['quote']:
$_SESSION['counter']: 0
...
Serialized data at end of page: a:3:{s:7:"counter";i:0;s:8:"quote";i:1023;s:9:"quotedate";s:10:"2010-11-18";}
Page 2. reload by form submit:
Serialized data at begin of page: a:1:{s:7:"counter";i:0;}
Current session id: vbbpohof2jo757eaj5jrp4dv02
$_SESSION['quote']:
$_SESSION['counter']: 1
...
Serialized data at end of page: a:3:{s:7:"counter";i:1;s:8:"quote";i:1024;s:9:"quotedate";s:10:"2010-11-18";}
Page 3. reload by form submit:
Serialized data at begin of page: a:3:{s:7:"counter";i:0;s:8:"quote";i:1023;s:9:"quotedate";s:10:"2010-11-18";}
Current session id: vbbpohof2jo757eaj5jrp4dv02
$_SESSION['quote']: 1023
$_SESSION['counter']: 1
...
Serialized data at end of page: a:3:{s:7:"counter";i:1;s:8:"quote";i:1023;s:9:"quotedate";s:10:"2010-11-18";}
Page 4. reload by form submit:
Serialized data at begin of page: a:3:{s:7:"counter";i:1;s:8:"quote";i:1024;s:9:"quotedate";s:10:"2010-11-18";}
Current session id: vbbpohof2jo757eaj5jrp4dv02
$_SESSION['quote']: 1024
$_SESSION['counter']: 2
...
Serialized data at end of page: a:3:{s:7:"counter";i:2;s:8:"quote";i:1024;s:9:"quotedate";s:10:"2010-11-18";}
Page 5. reload by form submit:
Serialized data at begin of page: a:3:{s:7:"counter";i:1;s:8:"quote";i:1023;s:9:"quotedate";s:10:"2010-11-18";}
Current session id: vbbpohof2jo757eaj5jrp4dv02
$_SESSION['quote']: 1023
$_SESSION['counter']: 2
...
Serialized data at end of page: a:3:{s:7:"counter";i:2;s:8:"quote";i:1023;s:9:"quotedate";s:10:"2010-11-18";}
Я надеюсь, что это показывает, моя проблема лучше, чем неясное оригинальное описание. Простите за это. На этот раз «два параллельных» массива переменных сеанса, если таковые могут быть, кажутся активными один за другим. Иногда другой активен несколько раз, а потом еще ...
--- EDIT ---
Это противоречит. Предоставьте более подробную информацию. Вывод, похоже, не тот, который должен быть получен из вашего кода отладки. Двойная проверка. –
Да, и откуда берется «цитата»? Почему он увеличивается? –
Вывод - это именно то, что выходит, только ';' добавленный мной, так как без этого все пошло в одну строку в моем сообщении, и запись «set_SESSION» не была включена, поскольку она последней на странице. Это нелогично, журнал хорошо показывает проблему. @Pekka: 'quote' устанавливается, если $ _SESSION ['quote'] не задано, и в этом случае предполагается увеличение. Проблема в том, что его не следует увеличивать, поскольку он уже установлен в этом сеансе. – Laowai