为什么header()没有正确地重定向?

时间:2016-07-16 03:38:13

标签: php url-routing

这是我网站的文件夹结构:

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

以下是两种情况:

  1. $_SESSION['login']等于1:我的脚本将我重定向到此路径:localhost/myweb
  2. $_SESSION['login']不等于1:我的脚本会将我重定向到此路径:localhost
  3. 第一种情况很好,我的意思是它按预期工作。但第二种情况是错误的,我的意思是它没有按预期工作。在第二种情况下,它应该将我重定向到此路径:localhost/myweb/login。那我怎么解决呢?

    注意:所有网页都会通过index.php

2 个答案:

答案 0 :(得分:0)

你可以使用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();
    }
}

}

答案 1 :(得分:0)

根据您的代码,我认为$_SESSION['login']被比较的任何条件都不等于(!=)到1

这部分没有任何意义,

$_SESSION['login'] = 1;

if ( $_SESSION['login'] == 1 ) {
    $_SESSION['error_message'] = 'something is wrong';
    header('location: ../login');
}

您始终将会话登录设置为1,因此无法进入该条件。

相关问题