0

我在我的 cakePHP 项目中启用了 admin_actions。我有一个普通员工的logout()和admin_logout()和一个用于管理员注销的这两个动作都属于EmployeesController。

两个注销操作中的代码是相同的,除了 flash 消息。

管理员注销():

$this->Session->destroy();
$this->Session->setFlash('You have been logged out of admin dashboard!','flash_success');
$this->redirect('/employees/login');

登出()

$this->Session->destroy();
$this->Session->setFlash('You have been logged out!','flash_success');
$this->redirect('/employees/login');

注销工作正常并破坏了会话。但不是admin_logout()

为了调试,我在admin_logout()中尝试了这个:

$this->Session->delete('Admin');
$this->Session->setFlash('You have been logged out of admin dashboard!','flash_success');
$this->redirect('/employees/login');

它也在工作。但它仍然不会破坏完整的会话变量。我可以通过对管理员和员工使用正常的logout()来解决这个问题。但出于好奇,这里出了什么问题?

编辑:需要的行为是销毁会话变量,然后使用 Flash 消息进行重定向。但是会发生重定向,并且会显示 Flash 消息,但会话变量没有被破坏!

4

3 回答 3

1

不是解决您的问题,而是一种更优雅的注销过程方法:
在您的类中只创建一个注销方法,一个不带前缀的方法。喜欢:

public function logout(){
}

现在,在您的所有视图中创建一个注销链接,明确取消admin前缀:

echo $this->Html->link('logout',
    array('admin'=>false,'controller'=>'employees','action'=>'logout')
);
于 2012-07-31T13:35:24.477 回答
0

如果你使用 2.0 你应该做

 $this->redirect($this->Auth->logout()); 

或者

$this->Auth->logout();

对于您的重定向

于 2012-07-31T12:59:50.130 回答
0

如果您想为管理员提供单独的 flash 消息,您可以简单地在 logout 方法中使用 if 语句来检查确定用户是否为管理员的任何变量。

    if($this->Auth->user('is_admin')){
        $this->Session->setFlash(__('You have been logged out of admin dashboard!','flash_success'));
    }
    else{
        $this->Session->setFlash(__('You have been logged out!','flash_success'));

我可能在这里遗漏了一些东西,但没有

    $this->redirect($this->Auth->logout());

销毁会话?

于 2013-10-08T15:16:20.073 回答