注销-zend框架后,后退按钮将用户带回受保护的页面

时间:2011-03-09 19:29:29

标签: php zend-framework zend-auth

我创建了一个页面登录,注销以访问控制面板 场景如下:用户登录并访问cpanel页面并注销 问题:登录完成后,如果用户点击浏览器后退按钮,用户返回登录页面,即使身份验证已完成并设置了会话,同时如果用户注销,则单击后退按钮将返回控制面板页面(如果用户刷新页面,那么一切似乎都很好,usr将被重定向到登录,后退按钮不会将她重定向到cpanel)。

问题是浏览器缓存,我尝试使用php header和html meta来阻止页面缓存,但我无法成功。任何解决方案?

我的退出操作代码如下

public function logoutAction()
      {   
         $auth=Zend_Auth::getInstance();
      //If logged in then move to index
         if(!$auth->hasIdentity()){
           $this->_redirect('admin/account/redirect');

      }
         $auth->clearIdentity();
      $this->_redirect('admin/account/redirect');

   }   

4 个答案:

答案 0 :(得分:1)

你总是可以运行一段javascript onLoad,它使用AJAX请求另一个PHP页面,然后如果用户登录,则将它们重定向回CPanel或Login页面,无论他们应该在哪里。

JQuery帖子可以很好地处理这个问题。 http://api.jquery.com/jQuery.post/

答案 1 :(得分:1)

浏览器的行为可能有所不同,您使用的浏览器是什么?

另外,为什么要在注销时检查用户是否有身份?无论用户是否登录,只需清除身份 - 更少的代码,更好......

我的退出代码如下:

    $auth = Zend_Auth::getInstance();
    $auth->clearIdentity();
    $this->_redirect('/identity/login');

答案 2 :(得分:0)

这是我在退出操作中的内容

Zend_Session::destroy();
$this->_helper->redirector('index', 'index');

由于Zend_Auth身份保存在会话中,因此它也会被破坏。如果我做一个回来(从导航器),没有识别被捕获,我被重定向到登录屏幕

答案 3 :(得分:0)

我将使用的方法是强制登录页面在新的窗口实例中进行。当用户注销时,关闭该窗口。没有什么可以回去的。

另一种方法是使用会话并在每次用户移动到新页面时执行POST 。点击后退按钮需要再次发布内容,但会话将关闭,请求将失败。