【问题标题】:back button takes the user back to protected page after logout -zend framework注销后,后退按钮将用户带回受保护的页面 -zend 框架
【发布时间】:2011-07-12 04:31:09
【问题描述】:

我创建了一个页面登录,注销以访问控制面板 场景是这样的:用户登录并访问 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');

   }   

【问题讨论】:

  • 在我看来你是对的,专注于浏览器缓存。正如您所注意到的,如果他重新加载其中一个页面,您的身份验证检查就会启动并将他重定向到登录。我会专注于修复您为不希望缓存的页面发送的标头无缓存。

标签: php zend-framework zend-auth


【解决方案1】:

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

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

【讨论】:

  • 我要试试这个。谢谢
  • Niko,我试过这个,问题是由于页面已经被浏览器加载和缓存,它不会再次加载页面,所以onLoad不会成功!
  • 我没有尝试过 Zend,但我使用的是 PHP 和 javascript。您应该没有理由不能使用 javascript 从另一个 PHP 脚本请求会话变量,如果您获得某个变量,则将浏览器重定向到另一个页面。页面是否缓存应该没有影响。
【解决方案2】:

这就是我的注销操作

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

由于 Zend_Auth 身份保存在会话中,它也会被销毁。如果我(从导航器)返回,则会发现缺少身份,并将我重定向到登录屏幕

【讨论】:

  • 最后我发现了问题所在,我在 Chrome 上尝试了该应用程序,如果我现在尝试单击后退按钮,它会将我重定向到登录,但在 Safari 中它没有发生,因为猜测缓存之前,然后我从开发>禁用缓存禁用缓存,现在它可以正常工作。不知道有没有什么好的解决办法!
【解决方案3】:

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

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

我的注销代码如下:

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

【讨论】:

  • 谢谢,我正在使用 safari。我没有在任何浏览器上检查它,但似乎我的页面正在被浏览器缓存,它没有执行 php 代码来检查 auth 实例并将用户重定向到登录页面。
  • 抱歉,无法使用 Zend_Auth 在我的网站上重新创建 Safari 的问题,所以不确定是什么问题。假设你所有的 PHP 代码都是正确的,使用 JavaScript 可能是你唯一的选择。
【解决方案4】:

我会使用的方法是强制登录页面发生在一个新的窗口实例中。当用户注销时,关闭该窗口。将没有什么可回头的。

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

【讨论】:

    猜你喜欢
    • 2022-01-21
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 2011-08-05
    相关资源
    最近更新 更多