2013-09-25 116 views
2

Im在CodeIgniter中使用PHP在Web应用程序中工作,并且im卡住了:P 它很难解释,所以我用一个例子来展示它。URL重定向不会总是工作?

我有正常的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功能检查,如果谁在加载这个页面(子页面)的用户登录。如果不是他在这样的LOGGED_IN功能被自动重定向:

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

5分钟前,这工作得很好。现在我创建了一个新的子域'assign'。

现在,如果在没有登录即时通讯,并尝试连接到以下网址我总是得到重定向

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

之一,但如果IM连接到

localhost/user/groups/assign 

他尝试加载这个页面(什么因为$ user_id为空而不起作用)。 为什么......这是否发生?

Regards Teifun2

+0

'header()'有** NO **返回值。 'echo header(...)'完全没有意义。 –

+0

为了记录,您对'$ subdomain'的使用不是针对子域的,而是针对子目录的。 – Dan

+0

@MarcB Ups:P谢谢你会改变这种情况,(但并不能解决我的问题) – Teifun2

回答

1

我建议你从这个修改LOGGED_IN()函数:

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

要这样:

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

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

+0

你是我的英雄:D你能解释一下为什么这是可行的吗?我的意思是为什么它适用于其他3个子目录,而不是分配? – Teifun2

+0

header()函数只是简单地让PHP向浏览器发送一个标题值,并指定一些值。在某些情况下,这是'位置'值,这表明浏览器应该重定向到其他位置。在代码级别,header()函数不像return语句,所以代码将继续执行。由于您通常总是希望位置标题成为页面加载的终点,因此在任何位置标题之后退出总是一个好主意。 – jrebs

+0

好的,谢谢你的帮助。 – Teifun2

0

使用$ _session将用户登录到...!所以即使在刷新和换页后,他仍然会保持登录状态。空值不会通过。

+0

问题是不保持登录,更多4个elseif语句中的一个不会得到hes实际上allredy重定向。 – Teifun2