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

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

したがって、この方法を使用する場合は、すべてのアクションに上記のコードを追加する必要があります。だから私の質問は、この方法は大丈夫ですか?またはそれを行う簡単な方法ですか?

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 に答える