У меня действительно странная проблема с переменными сеанса PHP. Исходя из идентификатора сеанса, создается впечатление, что внутри одного сеанса будут двойные переменные, что, естественно, невозможно.
Проблема заключается в том, что переменная сеанса 'quote' должна оставаться неизменной при отправке формы на странице, которая перезагрузит саму страницу. Переменная $ _SESSION ['quote'] устанавливается, только если она не определена, что происходит в первых двух перезагрузках, как видно из журналов ниже
Код отладки:
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 ---
Добавлена сериализация эха ($ _ 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 ---