2014-11-15 4 views
0

У меня были проблемы с 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): Я попробовал это снова на следующий день, но на этот раз сценарий работал так, как я ожидал ... Не уверен, что произошло.

+0

Вы уверены, что очищаете свои файлы cookie каждый раз, когда выполняете свои тесты? –

+0

Как выглядит ваш html? и вы вызывали сценарий 2 раза для этого вывода? Также обратите внимание, что если вы проверите это каждый раз, когда сессия все еще там! вы должны очистить его! – Rizier123

ответ

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»] IsSet для жизни вашей сессии .ie браузер открыт. Возможно, это причина, по которой вы получаете такие странные результаты.

Смежные вопросы