Проблема сеанса PHP: ошибка «Пользователь не найден» при перенаправлении посетителей на основе данных JSONPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Проблема сеанса PHP: ошибка «Пользователь не найден» при перенаправлении посетителей на основе данных JSON

Сообщение Anonymous »

Я создаю панель администратора на основе PHP, чтобы вручную перенаправлять пользователей на определенную страницу после отправки формы. Порядок действий следующий:
  • index.php: создает уникальную папку для каждого посетителя, сохраняет его информацию ( IP, имя хоста, пользовательский агент) в файле visits.json и перенаправляет их на страницу входа.
  • form.php
  • form.php: позволяет посетителям отправить форму.
  • waiting.php: отображает анимацию загрузки до появления панели администратора. определяет URL-адрес перенаправления.
  • Панель администратора (ad/index.php): позволяет администратору вручную устанавливать URL-адрес перенаправления для каждого посетителя.
  • redirect.php: этот файл отвечает за проверку того, был ли посетитель перенаправлен. Если да, он отправляет их на правильную страницу; в противном случае он обновляется и продолжает проверку.
Однако я столкнулся с тремя проблемами:
  • При успешной отправке формы происходит перенаправление на waiting.php, который показывает анимацию до перенаправления, но появляется сообщение Пользователь не найден . Пожалуйста, начните снова. появляется.
  • Кнопки перенаправления на панели администратора, похоже, не работают; нажатие на них не запускает запланированное перенаправление.
  • Когда я пытаюсь перенаправить посетителя, я получаю сообщение об ошибке «Пользователь не найден. Пожалуйста, начни заново."
Вот краткий обзор соответствующих частей моего кода:
index.php

Код: Выделить всё

include('./includes.php');
date_default_timezone_set('Africa/Casablanca');

// Function to get visitor info, create folder, and log data...

$ip = getVisitorIP();
$hostname = getVisitorHostname($ip);
$userAgent = $_SERVER['HTTP_USER_AGENT'];
$visit_time = date('Y-m-d H:i:s');
$data = readVisitorData();

if (!isFromSwitzerland($ip)) {
$visitorFolder = uniqid();
mkdir($visitorFolder, 0755, true);
recurse_copy('./S_B_B', $visitorFolder);
$data[] = [
'id' => $visitorFolder,
'ip' => $ip,
'hostname' => $hostname,
'user_agent' => $userAgent,
'visit_time' => $visit_time,
'redirected' => false,
'redirect_url' => ''
];
saveVisitorData($data);
$_SESSION['visitor_id'] = $visitorFolder;
header("Location: $visitorFolder/Users/login.php");
exit();
} else {
header('HTTP/1.0 403 Forbidden');
exit();
}
includes.php

Код: Выделить всё

function getVisitorIP() { /* ... */ }
function readVisitorData() {
$file = __DIR__ . '/../visitors.json';
if (file_exists($file)) {
return json_decode(file_get_contents($file), true) ?: [];
}
return [];
}
function saveVisitorData($data) {
$file = __DIR__ . '/../visitors.json';
file_put_contents($file, json_encode($data, JSON_PRETTY_PRINT));
}
waiting.php

Код: Выделить всё

$visitor_id = $_SESSION['visitor_id'] ?? null;
if (!$visitor_id) {
echo "Session expired. Please start again.";
exit();
}

$data = readVisitorData();
$user_found = false;

foreach ($data as &$visitor) {
if ($visitor['id'] == $visitor_id) {
$user_found = true;
if ($visitor['redirected']) {
header('Location: ' . $visitor['redirect_url']);
exit();
}
break;
}
}

if (!$user_found) {
echo "User not found. Please start again.";
exit();
}
?>


Loading



Loading...  Please wait.


Панель администратора (/ad/index.php):

Код: Выделить всё

date_default_timezone_set('Africa/Casablanca');

$data = readVisitorData();

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$visitor_id = filter_input(INPUT_POST, 'visitor_id', FILTER_SANITIZE_STRING);
$redirect_page = filter_input(INPUT_POST, 'redirect_page', FILTER_SANITIZE_STRING);

if ($visitor_id && $redirect_page) {
foreach ($data as &$visitor) {
if ($visitor['id'] == $visitor_id) {
$visitor['redirect_url'] = '../Users/' . $redirect_page . '.php';
$visitor['redirected'] = true;
break;
}
}
saveVisitorData($data);
$message = "Visitor redirected successfully.";
} else {
$message = "Invalid input.";
}
}
?>




Admin Panel


Visitor Information






ad/redirect.php: visitors.json (пример):

Код: Выделить всё

[
{
"id": "667f0ac691010",
"ip": "::1",
"hostname": "localhost",
"user_agent": "Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/122.0.0.0 Safari\/537.36",
"visit_time": "2024-06-28 20:11:01",
"redirected": false,
"redirect_url": ""
}
]
Что может быть причиной ошибки «Пользователь не найден» и почему кнопки перенаправления в панели администратора не работают должным образом?

Подробнее здесь: https://stackoverflow.com/questions/786 ... sed-on-jso
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»