2012-11-30 45 views
0

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

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

+0

千万不要使用用户名/密码格式的Cookies。不仅可以手动创建Cookie(我可以轻松访问您的网络应用程序),但它们也是这样的巨大安全风险!查看[ZfcUser] [1]和[ZfcAcl] [2] [1]:https://github.com/ZF-Commons/ZfcUser [2]:https://github.com/ZF-Commons/ZfcAcl – Sam

+0

@Sam可以使用会话而不是cookies – user1784592

+0

您需要了解差异。看到以下问题的一些见解:http://stackoverflow.com/questions/356562/web-authentication-state-session-vs-cookie-vs和就ZF2而言,上述模块将为你做相当多的事情;) – Sam

回答

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

但由于以前的海报悉饼干真的不好用的东西喜欢这个。这是一个非常通用的例子,尽管exit();部分在这个意义上非常重要,因为您希望杀死脚本以防止用户在其浏览器中转义时显示任何数据。出口();将基本上消灭并且不显示任何东西。

相关问题