Изменение значения переменной SESSION

Я пытался понять это на некоторое время, и это заставляет меня сходить с ума. В основном у меня есть форма для американских и канадских пользователей. В нижней части формы есть ссылка для канадских пользователей, которая направляет пользователей к can-sesssion.php, который содержит:

<?php if (isset($_SESSION['can'])) { session_start(); session_destroy(); session_unset(); session_start(); $_SESSION['can'] = 2; } else { session_start(); $_SESSION['can'] = 1; } header('Location: '. $_SERVER['HTTP_REFERER'] . ''); ?> 

В основном, если они нажимают на ссылку, она устанавливает $ _SESSION ['can'] = 1. Теперь есть еще одна опция, и если они нажмут на эту ссылку, она вернет их на эту страницу, и сеанс должен быть уничтожен, а новый значение установлено (ну, это то, что он должен делать). Проблема в том, что я напечатал $ _SESSION ['can'], и он по-прежнему сохраняет это старое значение после перехода на эту страницу. Есть ли лучший способ сделать это, или что-то не так с моим кодом? Спасибо за помощь.

Вот что вы написали:

 if (isset($_SESSION['can'])) { session_start(); 

session_start – это функция, которая считывает файл сеанса, связанный с PHPSESSID cookie пользователя PHPSESSID и заполняет $_SESSION , поэтому вы пытаетесь прочитать из массива до того, как он имеет какие-либо значения.

Вам нужно вызвать session_start прежде чем вы проверите, имеет ли значение $_SESSION['can'] значение.

Вам также не нужно уничтожать и создавать новый сеанс, чтобы изменить значение.

 <?php session_start(); if (isset($_SESSION['can'])) { $_SESSION['can'] = 2; } else { $_SESSION['can'] = 1; } header('Location: '. $_SERVER['HTTP_REFERER'] . ''); ?> 

Попробуйте: (используя только один session_start() )

 <?php session_start(); if (isset($_SESSION['can'])) { $_SESSION['can'] = 2; } else { $_SESSION['can'] = 1; } header('Location: '. $_SERVER['HTTP_REFERER'] . ''); ?>