0

我正在使用 zend framework-2 做项目。我想通过 URL 限制对某些 Web 目录的访问(如果用户没有登录)。如果用户尝试登录,我需要重定向登录页面。这就是我所做的(粗略的想法不是代码)。

授权控制器

 if(username and password ok){
     setcookie('username', $username);
     setcookie('password', $password);

     //redirect to AlbumController indexAction
     return $this->redirect()->toRoute('album', array('controller' => 'album', 'action' => 'index'));
  }

所以在 AlbumControler 我添加了这段代码

public function indexAction()
{        
    if(isset ($_COOKIE['username']) && isset ($_COOKIE['password'])){
        //some codes
    }
    else{
        //if user not logged redirect to loogin page 
        return $this->redirect()->toRoute('auth', array('controller' => 'auth', 'action' => 'index'));
    }
}

所以如果我使用这种方式,我需要在每个动作中添加上面的代码。所以我的问题是这样可以吗?还是他们这样做的简单方法?

4

1 回答 1

0

作为实际问题的答案,你可以在你的控制器构造中做到这一点......像这样......

namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;

class IndexController extends AbstractActionController {

    public function __construct() {
        $session = new \Zend\Session\Container('auth');
        if ( !isset($session->name) || !is_string($session->name) ) {
            echo "The following is not set:".$session->name; 
            header('Location: /user/login');
            exit();
        }
    }

但正如之前的海报所指出的,cookie 真的不适合用于这样的事情。这是一个非常通用的示例,尽管 exit(); 从这个意义上说,部分非常重要,因为您想杀死脚本以不显示任何数据,以防用户在浏览器上点击转义。出口(); 基本上会杀死并且不显示任何东西。

于 2012-11-30T08:03:57.467 回答