Я пытался понять это на некоторое время, и это заставляет меня сходить с ума. В основном у меня есть форма для американских и канадских пользователей. В нижней части формы есть ссылка для канадских пользователей, которая направляет пользователей к 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'] . ''); ?>