В настоящее время я настраиваю веб-сайт с использованием бэкэнда с платным окном, в который вы входите с учетными записями Microsoft. В настоящее время я использую сеансы PHP для сбора и отслеживания действительных запросов.
Мне удалось полностью уничтожить все данные сеанса, сохраненные на сервере, а также переименовать и очистить файлы cookie сеанса (см. Код ниже). К сожалению, этого недостаточно, кажется. Я все еще могу получить доступ к странице, передав старый идентификатор сессии через переменную GET, и я все еще могу загрузить страницу. Я подозреваю, что это кэшированная версия. Я попытался добавить заголовки php, чтобы предотвратить это, но он все еще загружается!
Код выхода:
<?php
if ($_POST) {
session_start($_POST["SID"]);
$_SESSION[] = array();
setcookie( session_name(), "", time()-3600, "/" );
session_destroy();
session_write_close();
echo("Session ".$_POST["SID"]." has been destroyed");
}
?>
Код заголовка:
<?php
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
?>
Я ожидал, что смогу нажать кнопку выхода из системы, и если бы я попытался вручную получить доступ к странице, указав старый идентификатор сессии с помощью команды GET, я должен был быть отклонен этой страницей. Есть ли способ обойти это? Может быть, вынудите страницу повторно запросить сервер (если я могу просто заставить его пинговать сервер снова, я считаю, что мой php должен отклонить запрос? Я говорю это с некоторой нерешительностью, хахаха )
EDIT:
Хорошо, так что после долгих отладок я сузил проблему и до моей $_SESSION["IS_AUTHORIZED"]
переменной? Это не должно быть возможным, но каким-то образом автономный скрипт PHP, который я написал для уничтожения сеанса, когда пользователь выходит из системы, может запустить тот же session_id()
, но каким-то образом не может получить доступ ни к одной из переменных сеанса ?! если я var_dump($_SESSION["IS_AUTHORIZED"])
, он выплевывает NULL
, тогда как на всех других страницах он выплевывает логическое значение 0
или 1
?!?!?! Я очень смущен ... Наверное, поэтому я не могу правильно удалить сеанс?
Код:
<?php
if ($_POST) {
session_id($_POST["SID"]);
echo(session_id()); //comes out as same as session origin page
session_start();
echo("|||"); //to make payoad easier to read lol
echo($_SESSION["IS_AUTHORIZED"]); //nothing... and var_dump() is NULL?
?>
РЕДАКТИРОВАТЬ 2:
О, господин. Так что теперь, после некоторой обработки, автономный скрипт PHP работает и связывается с правильным session_id()
, и я могу сделать весь бит session_destroy()
, $_SESSION = array();
, чтобы очистить информацию о сеансе. Небольшая проблема, хотя, если я обновлю HTML-страницу с session_id()
в качестве переменной GET, она все равно загрузит страницу? Даже говорит, что переменная `$ _SESSION [" IS_AUTHORIZED "], которую я предположительно только что очистил в своем автономном скрипте, теперь вернулась и вернулась к ней, прежде чем я ее очистил? Что буквально побеждает весь смысл использования сессий? Помогите, пожалуйста! (Я ненавижу php сессии до сих пор о моей душе!)