【问题标题】:URL redirection wont work always?URL 重定向不会一直有效?
【发布时间】:2013-09-25 14:50:46
【问题描述】:

我正在使用 CodeIgniter 在 PHP 中的 Web 应用程序上工作,但我卡住了:P 它很难解释,所以我举个例子。

我有普通的 CodeIgniter 控制器。在这个控制器中,我有这样的功能:

<?php
public function groups($subdomain ='') {

    $this->load->library('MyLogin');
    $user_id = $this->mylogin->logged_in();


    if ($subdomain == '') {
        .....
    } elseif ($subdomain == 'create') {
        .....
    } elseif ($subdomain == 'join') {
        .....
    } elseif ($subdomain == 'leave') {
        .....
    } elseif ($subdomain == 'assign') {
        .....
    } else {
        .....
    }
}

logged_in 函数检查正在加载此页面(子页面)的用户是否已登录。如果没有,他会自动在 login_in 函数中重定向,如下所示:

echo header("Location: /user/login");

5 分钟前这很好用。现在我创建了一个新的子域“分配”。

现在,如果我没有登录并尝试连接到以下 URL 之一,我总是会被重定向

    localhost/user/groups
    localhost/user/groups/2
    localhost/user/groups/create
    localhost/user/groups/join
    localhost/user/groups/leave

但是如果我连接到

    localhost/user/groups/assign

他尝试加载此页面(因为 $user_id 为空而无法正常工作)。 为什么……会发生这种情况?

问候 Teifun2

【问题讨论】:

  • header()NO 返回值。 echo header(...) 完全没有意义。
  • 郑重声明,您对$subdomain的使用不是子域,而是子目录。
  • @MarcB Ups :P 谢谢会改变这个,(但不能解决我的问题)
  • @DanLugg 是的:P 我来自瑞士,所以我不总是得到正确的词对不起 XD

标签: php codeigniter redirect if-statement


【解决方案1】:

我建议你从这里修改logged_in() 函数:

echo header("Location: /user/login");

到这里:

header("Location: /user/login");
exit;

我认为这将解决问题。回声与它无关,它只是多余的。

【讨论】:

  • 你是我的英雄 :D 你能解释一下为什么会这样吗?我的意思是为什么它适用于其他 3 个子目录而不适用于分配?
  • header() 函数只是让 PHP 向浏览器发送一个 header 值,分配一些值。在某些情况下,这是“位置”值,表明浏览器应重定向到其他位置。在代码层面,header()函数不像return语句,所以后面的代码会继续执行。由于您通常总是希望位置标头成为页面加载的终点,因此在任何位置标头之后退出总是一个好主意。
【解决方案2】:

在用户登录时使用 $_session...!所以即使在刷新和页面更改后他也会保持登录状态..!并且空值不会通过。

【讨论】:

  • 问题不在于保持登录状态,更多的是 4 个 elseif 语句中的一个没有得到他实际上已经重定向。
猜你喜欢
  • 1970-01-01
  • 2023-02-23
  • 1970-01-01
  • 2017-05-08
  • 2023-03-27
  • 2022-01-14
  • 1970-01-01
  • 2013-11-02
  • 1970-01-01
相关资源
最近更新 更多