Сессия не разрушается, хотя вызывается session_destroy () - PullRequest
0 голосов
/ 30 сентября 2019

Я разрабатываю систему с сеансами, в которой я поместил код для запуска сеанса после успешного входа в систему и присвоил значения переменным сеанса, например $_SESSION['email']. Кроме того, я поместил код уничтожения сеанса, но сеанс, похоже, не уничтожает. У меня есть следующие файлы - index.php Этот файл предоставляет пользователю доступ к правильным учетным данным с помощью следующего кода:

if(password_verify($password,$dbpass)){
    $stmt = $conn->prepare("SELECT name, image FROM admins WHERE email=?");
    $stmt->bind_param("s",$email);
    $stmt->execute();
    $stmt->store_result();
    $stmt->bind_result($name,$image);
    $stmt->fetch();
    $_SESSION['name'] = $name;
    $_SESSION['email'] = $email;
    $_SESSION['image'] = $image;
    header("Location:insert.php");
}

Он отлично работает, устанавливая переменные сеанса и перенаправляя в нужный файл. В файле insert.php я импортировал файл session.php с кодом ниже:

session_start();
if(!isset($_SESSION['email'])){
    header("Location:index.php");
}

также у меня есть файл logout.php со следующим кодом:

if(isset($_SESSION['email'])){
    session_destroy();
}
header("Location: index.php");

После запуска logout.php, если я снова пытаюсь получить доступ к файлу insert.php, он открывается, хотя в него импортируется файл сеанса. Он должен быть перенаправлен в файл index.php. Что не так? Любой, пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019
if(isset($_SESSION['email'])){
    session_start();
    session_destroy();
}
header("Location: index.php");

Вы не можете уничтожить сеанс, не имея «начала» раньше. Рекомендуется иметь файл сеанса, который содержит "session_start ();"из которого вы строите шаблоны, так что на каждой странице всегда есть "session_start ();"

0 голосов
/ 30 сентября 2019

Ваш сеанс и переменные сервера $ _SESSION разделены. Сеанс будет прерван, но переменная не будет пустой.

Попробуйте это:

session_start();
session_destroy();

//Now you can choose whether you want to unset all sessions, or specific one(s):
$unset_sessions = ['email'];

foreach($_SESSION as $session => $session_value) {
   if (in_array($session, $unset_sessions))
      unset($_SESSION[$session]);
}

//Or all of them:
$_SESSION = [];

Думаю, было бы интересно также создать из этого функцию:

function breakSessions($specifics= []) {

   if (!empty($specific)) { //Handle specifics
      foreach($_SESSION as $session => $session_value) {
         if (in_array($session, $specifics))
            unset($_SESSION[$session]);
      }
   } else {
      $_SESSION = [];
   }

}

breakSessions(['login', 'remember_me']) //Specifics;
breakSessions(); //All of them```
...