2012-03-30 55 views
0

我正在尝试完成一个相当简单的任务,但我陷入了某个地方。转移用户在php mvc环境中登录

我是什么努力实现:如果我登录的管理员,我必须先登录任何用户的选项。在我作为用户登录后,如果我想回到管理员,我需要注销用户,并且我将被重定向到管理员。

我试图找回管理员时遇到问题。如果我通过管理员登录了一些用户帐户,那么我在管理员登录到帐户的登录功能中设置了一个会话变量。然后在注销时检查会话变量是否已设置。如果已设置,则将管理员重新登录到其面板,如果没有,则只需登出用户。

但它似乎不工作这样的...当我注销,我失去了一切。如果有人能帮助我解决这个问题,我将不胜感激。如果有人想看看它,我也可以粘贴代码。

这里是代码

if(isset($_POST['login']) || isset($adminInit)) { 
    if(!isset($adminInit)) { 
     // it is a regular user 
     // clean POST input 
     // return the user from the database 
    } 
    else { 
     // it is the admin 
     // return the user from the database 
    } 
    if(!empty(the database call)) { 
     if(isset($adminInit)) { 
      $this->session->adminID = $this->session->id; 
     } 
     $this->session->loggedIn = true; 
     $this->session->id = $data['id']; 
     $this->session->level = $data['user_level']; 
     if($this->session->level == 9) 
      header('location: ' . __SITE_URL . 'admin/'); 
     else 
      header('location: ' . __SITE_URL); 
    } 
    else $printError; 
} 

日志这是日志出码

if(isset($adminInit)) { 
    $this->session->id = $this->session->adminID; 
    header('location: ' . __SITE_URL . 'authenticate/login/'); 
} 
$this->session->destroy(); 
header('location: ' . __SITE_URL); 
+0

执行“以用户身份登录”部分的代码是什么? – 2012-03-30 20:45:37

+0

如何将代码作为您的问题的答案?我做到了,但是我做了很多混乱..好吧,我会编辑我的第一篇文章。 – Darko 2012-03-30 22:17:25

+0

该死的..其实我的意思是“以用户身份注销”..导致一些脑瘤我设法摆动“你”和“出”..抱歉。但实际上,登录和登出都将有助于查找发生了什么 – 2012-03-30 22:45:07

回答

0

而不是在每次注销时执行session_destroy()。相反,您应该在会话中执行stack或某些类似的LIFO结构以保存帐户列表。

是的,你应该保持会话中的所有帐户链和实际访问,因为以后你可能不仅需要“查看帐户作为用户”,而且还能够看到一些额外的信息“作为管理员”。

基本上,你需要实现的是在登录时,你推新用户的详细信息(最有可能的 - 作为阵列本身)。在注销时,您弹出最后一个活动用户..然后检查堆栈中的下一个项目是什么。如果堆栈为空,则完全注销(并可能销毁会话)。是否还有一些帐户信息 - 您将他/她重定向到适当的页面。

0

听起来你丢失的会话数​​据 - 你要么失去会话ID(饼干由于域/路径设置而被取消设置或无效)或者有一个session_destroy()隐藏在某处。

+0

在我的注销功能中,我将admin会话变量放入帐户会话ID中,然后尝试再次登录管理员。但它只是因为某种原因破坏了会话。 – Darko 2012-03-30 20:42:50