这是我网站的文件夹结构:
myweb/
index.php
files/
autoloader.php
login.php
这是我的脚本:
// login.php
class login{
public function __construct () {
function signed(){
header('Location: ../');
exit;
}
}
public function index(){
echo isset($_SESSION['error_message']) ? $_SESSION['error_message'] : null;
if ( $_SESSION['login'] == 1 ) {
signed();
}
$_SESSION['login'] = 1;
if ( $_SESSION['login'] == 1 ) {
$_SESSION['error_message'] = 'something is wrong';
header('location: ../login');
}
}
}
当我加载此路径时:
localhost/myweb/login
以下是两种情况:
-
$_SESSION['login']
等于1
:我的脚本将我重定向到以下路径:localhost/myweb
-
$_SESSION['login']
不等于1
:我的脚本将我重定向到以下路径:localhost
第一种情况很好,我的意思是它按预期工作。但是第二种情况是错误的,我的意思是它没有按预期工作。在第二种情况下,它应该将我重定向到这条路径:localhost/myweb/login
.那么我该如何解决它?
注意:所有页面都通过index.php
。
您可以使用 ob_start(); 在页面顶部和 ob_end_flush(); 在标题之后。它应该工作最后一个选项,您可以使用 JavaScript 重定向页面
ob_start();
类登录{
public function __construct () {
function signed(){
header('Location: ../');
ob_end_flush();
exit;
}
}
public function index(){
if ( $_SESSION['login'] == 1 ) {
signed();
}
$_SESSION['login'] = 1;
if ( $_SESSION['login'] == 1 ) {
header('location: ../login');
ob_end_flush();
}
}
}
根据您的代码,我没有看到任何将$_SESSION['login']
进行比较为不等于(!=
)的条件 1
.
而这部分没有任何意义,
$_SESSION['login'] = 1;
if ( $_SESSION['login'] == 1 ) {
$_SESSION['error_message'] = 'something is wrong';
header('location: ../login');
}
您始终将会话登录设置为 1
,因此它无法进入该条件。