Почему не модифицируются сессии между разными php скриптами?

Рейтинг: 0Ответов: 0Опубликовано: 25.07.2023

У меня есть несколько по сути изолированных друг от друга скрипта, то есть каждый раз запускается какой-то из них при запросе, родителя как такового нет. Вот я делаю запрос на login.php, проверяю данные и записываю сессию:

<?php
session_start();
$_SESSION['role'] = 2;

Затем в другой скрипте, getProducts.php, я валидирую права доступа по значению в сессии

<?php
session_start();
if ($_SESSION['role'] !== 2) {
  http_response_code(403);
  exit();
}
else {
  $resp['role'] = $_SESSION['role'];
  http_response_code(200);
  echo json_encode($resp);
  exit();
}

В примере выше я просто возвращаю роль, чтобы из консоли наблюдать за ее состоянием. И в этой ситуации роль равняется "2" - скрипт работает, все ок, права доступа валидируются. Сейчас я хочу удалить сессии пользователя, по сути разлогинить его, чтобы протестировать, что скрипты не будут пускать человека без сессии. Я создал logout.php и поместил в него разные вариации кода:

<?php
session_start();
unset($_SESSION);
echo json_encode(['role' => $_SESSION['role'], 'id' => $_SESSION['id']]);

.

<?php
session_start();
unset($_SESSION['role']);
echo json_encode(['role' => $_SESSION['role'], 'id' => $_SESSION['id']]);

.

<?php
session_start();
session_unset();
session_destroy();
echo json_encode(['role' => $_SESSION['role'], 'id' => $_SESSION['id']]);

.

<?php
session_unset();
session_destroy();
session_abort();

echo json_encode(['role' => $_SESSION['role'], 'id' => $_SESSION['id']]);

и даже

<?php
session_start();
$_SESSION['role'] = 'dfdfdfdf';
echo json_encode(['role' => $_SESSION['role'], 'id' => $_SESSION['id']]);

и т.д.

В ответе на запрос к logout.php я вижу, что $_SESSION['role'] === null

Но затем, когда я снова делаю запрос к getProducts.php я снова получаю в ответе role = 2.

Почему сохранение сессий между отдельными скриптами работает (в файле login.php) работает и переменная читается в других скриптах (getProducts.php), но их дальнейшая модификация в других файлах ($_SESSION['role'] = 'dfdfdfdf';) не меняет значение для всех остальных скриптов? Как очистить сессии в одном скрипте для остальных?

Ответы

Ответов пока нет.