php - 验证管理员是否登录 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
解决方案
您需要exit
在发送Location
标头后。
该header
函数只是在最终发送的结果中添加一个标头。正如您不这样做exit
,所有随后的代码仍会执行,并且该代码的输出与Location
标头一起发送到客户端。
推荐阅读
- button - 在 Xamarin 表单中使用带有图像和文本的按钮
- react-native - 如何调用 Actions.pop() 并刷新上一个场景?React Native、Redux、React-Native-Router-Flux
- javascript - 将对象数组转换为数组数组?
- java - 无法删除 recyclerview 项目
- android - 缩放画布后坐标错误
- java - Spring JDBC:即使将行插入表中,也不返回自动生成的id
- laravel - 如何在 laravel 5.6 中获取配置值
- java - 如何在组件扫描期间避免 Spring 中不需要的 bean?
- python - 计算有多少演员与其他不同的演员/演员合作过
- prolog - prolog中的广度优先搜索给了我一个错误