Переменная PHP $ _SESSION не отменяется

извините за повторяющийся вопрос, я видел несколько из них на этом форуме, но ни один из ответов не работал для меня …

Я создаю базовый логин, используя php-сессии, которые я новичок в …

login.php проверяет форму входа в html и начинает сеанс, устанавливая переменные: $_SESSION['login'] и $_SESSION['id] ,

то каждая страница, для которой требуется действительное использование логина, require 'session.php'; который проверяет переменную $_SESSION['valid'] и перенаправляет пользователя без правильной переменной входа. Проблема в том, что при выходе из системы ни одна переменная сеанса, которую я установил, не будет отменена.

Прямо сейчас мой файл logout.php использует каждый метод для уничтожения переменных, которые я смог найти в Интернете, и никто на самом деле этого не сделает.

Поэтому всякий раз, когда я выхожу из системы, я могу получить доступ к «закрытым» страницам.

Также обратите внимание: я пробовал это с именем сессии ex: session_start(); это не работает, так что теперь я использую session_start("user");

Также обратите внимание: я НЕ использую файлы cookie.

Вот файлы, которые я упомянул:


login.php


 $email=$_POST['email-log']; $pass=$_POST['password-log']; $i=-1; do {$i++; $path="users/".$i.".json"; $file= file_get_contents($path); $x=json_decode($file,true); } while($x['email']!=$email); $id=$i; $truepass=$x['pass']; $errors=0; $hash=hash('sha256',$pass); if($hash != $truepass){$errors=$errors+1;} if($errors==0){ session_start("user"); $_SESSION['login']="valid"; $_SESSION['id']=$id; header('Location: loginlanding.php');} else{header('Location: front.php?error=y');} 

session.php


 session_start("user"); if($_SESSION['login'] !== "valid") {header('Location: front.php?needto=login');} 

logout.php


 unset($_SESSION); unset($_SESSION['login']); unset($_SESSION['id']); session_unset("user"); $_SESSION=array(); session_destroy("user"); header('Location: front.php?logged=out'); 

Любые ответы приветствуются, и я благодарю вас заранее, также обратите внимание: я новичок в логинах в целом, поэтому любые советы по повышению безопасности также приветствуются. Я планирую сделать его более безопасным, но сначала мне нужно запустить эту базовую функциональность.

Вы никогда не должны unset($_SESSION) .

Самый простой способ очистить переменную $_SESSION = Array();$_SESSION = Array();

Однако вы также можете выполнить итерацию с unset :

 foreach(array_keys($_SESSION) as $k) unset($_SESSION[$k]); 

Удивительно, сколько вещей вы пытаетесь сделать после того, как вы отменили единственную ссылку, которую вы имели на сеанс в первую очередь. Непосредственно из руководства:

предосторожность

НЕ ОТКЛЮЧИТЕ всю $_SESSION с unset($_SESSION) как это отключит регистрацию переменных сеанса через $_SESSION .

http://php.net/manual/en/function.session-unset.php

Вы отменяете $_SESSION поэтому ваши unsets для других массивов супер-глобальной $_SESSION не регистрируются, оставляя их все еще в временных файлах браузеров. Используйте session_unset() вместо этого, если вы пытаетесь удалить все переменные сеанса. В противном случае не отключайте сеанс глобальный, но не удаляйте каждое отдельное значение, которое вы хотите удалить.

Мой рабочий пример (обратите внимание, что вы должны положить начало вызова)

 <?php session_start(); session_unset(); session_destroy(); header('location: ./'); ?>