【问题标题】:Why header() doesn't redirect me correctly?为什么 header() 没有正确重定向我?
【发布时间】:2016-07-16 03:38:13
【问题描述】:

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

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

第一种情况很好,我的意思是它按预期工作。但是第二种情况是错误的,我的意思是它没有按预期工作。在第二种情况下,它应该将我重定向到此路径:localhost/myweb/login。那么我该如何解决呢?

注意:所有页面都经过index.php

【问题讨论】:

  • 试试这个:header('location: /login');
  • @user4887505 错误.. 在您的情况下,它将我重定向到此路径 localhost/login 这是无效的。
  • 如果你加载“localhost/myweb/login”路径并且 $_SESSION['login'] 不等于 1 在这里你已经在登录文件中了,那你为什么要重定向页面呢?
  • @user4887505 实际上我需要将页面重定向到自身。换句话说,我需要刷新一个页面。实际上,我会填写像$_SESSION['error'] = 'something'; 这样的会话,我需要刷新页面以向用户显示该错误。
  • 要刷新页面,请在 $_SESSION['error'] = 'something'; 之后尝试这个: header("刷新:0");

标签: php url-routing


【解决方案1】:

你可以使用 ob_start();在页面顶部和 o​​b_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();
    }
}

}

【讨论】:

    【解决方案2】:

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

    而且这部分没有任何意义,

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

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

    【讨论】:

      猜你喜欢
      • 2019-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-03
      • 1970-01-01
      • 2019-02-19
      • 2021-02-15
      相关资源
      最近更新 更多