У меня примерно такой сценарий: Код (PHP): session_start(); if (!isset($_SESSION['login'])) { //Этот блок выполняется если пользователь ещё не авторизован // и ему присваивается переменная $_SESSION['login'] } //Здесь по идее переменные сессии должны удаляться //и дальше ничего не должно происходить if (isset($_GET['logout'])) session_destroy(); if (isset($_SESSION['login'])) { //Тут для пользователя выводится контент // если он прошёл авторизацию //и есть кнопка ВЫЙТИ <input type="submit" name="logout" value="logout"> } Так вот когда я нажимаю кнопку ВЫЙТИ ничего не происходит. Страница обновляется и в ней всё выводится, как если переменная $_SESSION['login'] ещё существует. Разлогинивает только со второго нажатия на ВЫЙТИ. Добавлено спустя 50 секунд: Вот весь код Код (PHP): <?php session_start(); //Если пользователь ещё не в системе if (!isset($_SESSION['login'])) { //Проверим ввёл ли пользователь данные if (empty($_POST['login']) || empty($_POST['password'])) { die('<h1>Enter your login and password [url="index.php"]here[/url]</h1>'); } //Создадим короткие переменные $login = $_POST['login']; $password = $_POST['password']; //Подключимся к базе данных $dbcon = mysqli_connect('localhost', 'root', '', 'tasktable'); if (!$dbcon) { die('<h1>Database connection error ('.mysqli_connect_error().')</h1>'); } mysqli_set_charset($dbcon, "utf8"); $login = mysqli_real_escape_string($dbcon, $login); //Проведём аутентификацию $query = "SELECT * FROM `users` WHERE `login`='$login'"; $result = mysqli_query($dbcon, $query); $user = mysqli_fetch_array($result); if ($user['password'] == $password) { $_SESSION['login'] = $login; } } //Уничтожить сессию если нажата кнопка выхода из системы if (isset($_GET['logout'])) { session_destroy(); } //Генерируем страницу, если пользователь прошёл авторизацию или уже в системе if (isset($_SESSION['login'])) { ?> <html> <head> <title>Your counter</title> </head> <body> <form method="GET" action=""> <input type="submit" name="increase" value="+1"> </form> <form method="GET" action=""> <input type="submit" name="logout" value="logout"> </form> </body> </html> <?php } ?>
1) код уязвим к инъекциям; 2) пароли в открытом виде не храни; 3) не юзай гет для логаута; 4) Жирным выделено как раз то, что создает тебе проблемы. Потому что нужно до кучи юзать вот это: http://php.net/manual/ru/function.session-unset
Благодарю за помощь. я новичок и кроме mysqli_real_escape_string не знаю чем защищаться как хранить тоже не знаю переделаю А о каких данных тогда речь. Если он глобальные( имеется ввиду наверно суперглобальные ?) переменные не уничтожает. Добавлено спустя 8 минут 8 секунд: добавил session_unset(), всё равно выходит только после второго нажатия Добавлено спустя 1 минуту 44 секунды: Или надо просто сделать unset($_SESSION['login']) ? Добавлено спустя 3 минуты 18 секунд: С обычным ансетом работает ! Но интересно почему session_unset() и session_destroy() у меня не действуют.
Проглядел, нет, я был неправ. Ты и кодировку указал и эскейпинг заюзал. В виде хеша и соли. Так и гугли. "Соль" - это устоявшийся термин. Более того, даже на этом форуме в поиске вбей "пароль" "соль", и зачитывайся. Оно и должно происходить при вызове session_unset(). Что-то ты не так делаешь, сдается мне. У меня это все работает без проблем.