我想通过URL限制对某些Web目录的访问

时间:2012-11-30 05:45:40

标签: php zend-framework2

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

AuthController

 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'));
  }

所以在AlbumControoler中我添加了这段代码

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'));
    }
}

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

1 个答案:

答案 0 :(得分: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();在这个意义上,部分是非常重要的,因为你想要杀死脚本以便在用户在浏览器上遇到转义时不显示任何数据。出口();将基本上杀掉并且不显示任何东西。