Подтвердить админ вошел в php - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть php-скрипт, который генерирует RSS-канал, но я хочу, чтобы он был доступен только администраторам.В настоящее время я использую этот метод

if($_SESSION['isAdmin'] != true) {
  $_SESSION['sessionErrors'][] = "Sorry, you are not allowed access the page 'Update RSS Feed'";
  header("Location: /");
}

Он работает на других страницах, но по какой-то причине он здесь не работает.

Я хочу, чтобы эта страница подтверждала, что пользователь является администратором ($_SESSION['isAdmin] == true), запустите скрипт обновления файла RSS, перенаправьте обратно на обычную страницу admin.

Вот основной скелет страницы.Я удалил все вещи, которые не имеют значения

<?php

  if($_SESSION['isAdmin'] != true) {
    $_SESSION['sessionErrors'][] = "Sorry, you are not allowed access the page 'Update RSS Feed'";
    header("Location: /");
  }

  $file = fopen('rss.xml', "w") or die("Unable to open file");

  try {
    // Connect to db
    $conn = new PDO("mysql:host=" . SERVERNAME . ";" . "dbname=" . DBNAME, USERNAME, PASSWORD);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $query = $conn->query('SELECT * FROM * ORDER BY upload_date DESC ');
    $result = $query->fetchAll(PDO::FETCH_OBJ);

    $rssfeed = 'This gets set based on what the db returns';

  } catch (PDOException $e) {
    echo $e->getMessage();
  }

  fwrite($file, $rssfeed);
  fclose($file);

  header("Location: /admin.php");

В моем тестировании, когда я не вошел в систему, он все еще выполняет сценарий (генерирующий файл rss.xml), а затем перенаправляет меня обратно настраница администратора.Который я не вошел в систему, так что перенаправляет меня обратно на / с ошибкой, говоря, что мне не разрешен доступ admin.php

Ответы [ 3 ]

0 голосов
/ 24 февраля 2019

Добавьте exit() в конец перенаправления заголовка местоположения.Это предотвратит выполнение кода после этого.

<?php

  if($_SESSION['isAdmin'] != true) {
    $_SESSION['sessionErrors'][] = "Sorry, you are not allowed access the page 'Update RSS Feed'";
    header("Location: /");
    exit(); // It will stop here.
  }

// The rest of the code
.........
0 голосов
/ 25 февраля 2019

После прочтения комментариев я понял, что никогда не начинал сеанс с session_start(); ?

Однако я также добавил exit(); в конец перенаправления, потому что это хорошая практика, я думаю.

Все еще много изучаю php, поэтому любые советы, которые вы, ребята, даете мне, очень ценятся.Спасибо за помощь !!

0 голосов
/ 24 февраля 2019

Вам нужно exit после отправки заголовка Location.

Функция header просто добавляет заголовок к результату, который в конечном итоге будет отправлен.Поскольку вы не exit, весь следующий код все еще выполняется, и вывод этого кода отправляется клиенту вместе с заголовком Location.

...