php - PHP - 会话将我重定向到无限 login.php 页面
问题描述
因此,我的所有网站页面(包括 login.php)中都包含一个标头,并且在该标头中我设置了一个条件,即如果 $_SESSION['logged'] 未设置且不为空,它会自动重定向到 login.php。
if(!(isset($_SESSION['logged']) && $_SESSION['logged'] != '')) {
redirect_to(url_for('/login.php'));
}
问题是在我的 login.php 文件中我没有设置 $_SESSION['logged'] 因为它仅在用户单击登录后设置,并且文件 login.php 在页面加载之前无限次重定向到自身:
if($password == $user['hashed_password']) {
$_SESSION['logged'] = $username;
redirect_to(url_for('/staff/index.php'));
}
第一个代码在我的头文件中,第二个在我的登录文件中。登录文件包括头文件。
解决方案
就个人而言,我根本不会在登录页面上包含重定向检查,但如果你这样做,你应该避免在用户已经在登录页面上时触发重定向条件,例如,这样的事情应该可以工作:
$currentPage = basename($_SERVER['PHP_SELF']);
if($currentPage !== 'login.php' && empty($_SESSION['logged'])) {
redirect_to(url_for('/login.php'));
}
// If they hit the login page but are already logged in, or submitted
// a valid password, log them in
// might need to adjust the "already logged in logic" for you use case
if(
($currentPage === 'login.php' && !empty($_SESSION['logged'])) ||
$password == $user['hashed_password']
) {
$_SESSION['logged'] = $username;
redirect_to(url_for('/staff/index.php'));
}
推荐阅读
- google-apps-script - 有没有办法在 Google App Scripts 中调用 getAlias 名称?
- go - Golang for select 循环消耗 100% 的 cpu
- c++ - 来自 C++ 的 QStandardItemModel 在 QtQuick / QML TableView 中不可见
- javascript - 从字符串中删除一个字符的函数
- java - 对数组进行排序的最简单方法是什么?
- vuejs2 - vue-material 表不适用于 v-slot 语法
- regex - Vim:如何替换字符串的多个实例,但仅限于该字符串中的某些分隔符之间
- c# - 处理 json 以写入文件的 WebAPI 控制器
- python - 在 python 中使用 matplotlib 时从 csv 文件中操作数据值
- reactjs - 使用 useReducer 更新状态时出现问题