У меня были проблемы с PHP переменных сессий, поэтому я привел его вниз к этому простому коду:PHP переменной сеансы назначены перед назначением
session_start();
echo "I was: " . $_SESSION['myvar'] . "<br>";
$_SESSION['myvar'] = intval($_GET['pos']);
echo "I am: " . $_SESSION['myvar'] . "<br>";
Я прошел в случайных значениях строки запроса. Я ожидал, что оператор «Я был» для печати старого значения, затем назначается новый (из строки запроса), а новый - эхом. Тем не менее, здесь был мой выход для этих двух последующих запросов: $ _GET [ 'поз'] = 1 и $ _GET [ 'поз'] = 2.
#Expected output
I was
I am 1
I was 1
I am 2
#Actual output
I was 1
I am 1
I was 2
I am 2
Любые идеи, почему это происходит?
EDIT: Из комментариев я вижу, что я не уточнил, как я использую свой оригинальный скрипт.
1- Я хочу помнить, с какой страницы пользователь в данный момент включен. Когда пользователь запрашивает новую страницу (вызов AJAX), запрос проходит через мой скрипт, я обновляю переменную сеанса, содержащую текущую страницу пользователя, и я возвращаю строку json_encode, из которой мой javascript обновляет страницу пользователя.
2- Что я моделируюсь здесь был:
Первого запроса: Пользователь не на любой странице, и прошу страницу 1.
Второго запроса: Пользователь находится на странице 1 (что мой скрипт запоминает с переменным сеансом моделируемых здесь с $ _SESSION ['myvar']) и запрашивает стр. 2. Таким образом, для следующего запроса мой скрипт будет знать, что пользователь находится на странице 2, и далее, и далее.
3- Что я получаю здесь: Пользователь не на странице, запрашивает страницу 1 ... Но мой сценарий (по какой-то неизвестной причине) считает, что он уже на стр. 1. То же самое для страницы 2.
Я предполагал, что использование переменных сеанса было способом. Был ли я неправ?
Благодарим за помощь.
EDIT (2): Я попробовал это снова на следующий день, но на этот раз сценарий работал так, как я ожидал ... Не уверен, что произошло.
Вы уверены, что очищаете свои файлы cookie каждый раз, когда выполняете свои тесты? –
Как выглядит ваш html? и вы вызывали сценарий 2 раза для этого вывода? Также обратите внимание, что если вы проверите это каждый раз, когда сессия все еще там! вы должны очистить его! – Rizier123