переменная сессии php, назначенная перед назначением

У меня были проблемы с переменными сеанса php, поэтому я объяснил это простым кодом:

session_start();
echo "I was: " . $_SESSION['myvar'] . "<br>";
$_SESSION['myvar'] = intval($_GET['pos']);
echo "I am: " . $_SESSION['myvar'] . "<br>";

Я передал в строку запроса случайные значения. Я ожидал, что оператор «Я был» будет печатать старое значение, затем назначается новое (из строки запроса), и новое выводится. Тем не менее, здесь был мой вывод для этих двух последующих запросов: $ _GET [‘pos’] = 1 и $ _GET [‘pos’] = 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

Есть идеи, почему это происходит?

РЕДАКТИРОВАТЬ: Из комментариев, я вижу, что я не дал понять, как я использую свой оригинальный сценарий.
1- Я хочу вспомнить, с какой страницы сейчас находится пользователь. Когда пользователь запрашивает новую страницу (вызов AJAX), этот запрос проходит через мой сценарий, я обновляю переменную сеанса, содержащую текущую страницу пользователя, и отображаю строку json_encode, из которой мой javascript обновляет страницу пользователя.
2- То, что я смоделировал здесь, было:
Первый запрос: пользователь не находится ни на одной странице, а запрашивает страницу 1.
Второй запрос: пользователь находится на странице 1 (которую мой сценарий запоминает с помощью переменной сеанса, смоделированной здесь с $ _SESSION [‘myvar’]), и запрашивает страницу 2. Таким образом, для следующего запроса мой сценарий будет знать, что пользователь включен страница 2, и так далее, и так далее.
3- Что я получаю здесь: пользователь не на странице, запрашивает страницу 1 … Но мой сценарий (по неизвестной причине) считает, что он уже на странице 1. Та же идея для страницы 2.

Я предполагал, что использование переменных сеанса было способом пойти. Был ли я не прав?

Спасибо за помощь.

РЕДАКТИРОВАТЬ (2): я попробовал это снова на следующий день, но на этот раз сценарий работал, как я ожидал … Не уверен, что случилось, хотя.

0

Решение

Попробуйте использовать этот код для уничтожения сессии

// Initialize the session.
// If you are using session_name("something"), don't forget it now!
session_start();

// Unset all of the session variables.
$_SESSION = array();

// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}

// Finally, destroy the session.
session_unset(); session_destroy(); session_write_close(); setcookie(session_name(), '', 0, '/'); session_regenerate_id(true);

header('Location:index.php');
exit();
0

Другие решения

Ценность СЕССИИ [‘myvar’] установлена ​​для жизни вашего сеанса .т.е. браузер открыт. Это может быть причина, почему вы получаете такие странные результаты.

0

По вопросам рекламы [email protected]