首页 > 解决方案 > 验证管理员是否登录 php

问题描述

我有一个生成 RSS 提要的 php 脚本,但我只希望管理员可以访问它。我目前使用这种方法

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

标签: phploginsession-variables

解决方案


您需要exit在发送Location标头后。

header函数只是在最终发送的结果中添加一个标头。正如您不这样做exit,所有随后的代码仍会执行,并且该代码的输出与Location标头一起发送到客户端。


推荐阅读