2012-09-11 63 views
0

我正在使用zend框架。我建立了一個簡單的登錄屏幕。當用戶登錄時,我想設置一個會話,然後在其成員區域控制器的init函數中進行檢查,以檢查會話並授予訪問權限,否則重定向到登錄屏幕。在不同的控制器中應用並調用會話

我已經把我的登錄控制器像這樣,這個檢查用戶名和密碼,並設置會話:

if (isset($_POST['loginSubmit']) && $form->isValid($_POST)){ 
      $inputtedUsername = $_POST['username']; 
      $inputtedPassword = $_POST['password']; 
      if ($inputtedUsername == $username && $inputtedPassword == $password) { 
       $loggedIn = new Zend_Session_Namespace('loggedIn'); 
       $loggedIn->success; 
       $this->_forward('index', 'home'); 
      } else { 
       echo 'invalid'; 
      } 
     } 

我有一個家控制器,它只有登錄用戶應該能夠看到,所以在我有的innit函數: $ loggedIn = new Zend_Session_Namespace('loggedIn');

if (isset($loggedIn->success)) { 
      echo 'success'; 
     }else{ 
      $url = $this->view->url(array(
       'controller' => 'index', 
       'action' => 'index')); 
      header('Location:' . $url); 
     } 
    } 

當我登錄時,使用正確的憑據,它將我重定向到登錄屏幕,如else函數中所述。

我在做什麼錯?

回答

2

首先你Zend_Session_Namespace的使用是不完整的(你永遠不分配一個值命名空間):

$loggedIn = new Zend_Session_Namespace('loggedIn');//here you created a namespace 
$loggedIn->success;//here you created a key in that namespace with no value 

你的代碼似乎是結構化分配給$loggedIn->success任何值將返回true的方式,所以也許嘗試:

$loggedIn = new Zend_Session_Namespace('loggedIn');//here you created a namespace 
$loggedIn->success = true; 

雖然這可能會解決您的本期,我想建議你採取一看,二Zend的組件,可以與身份驗證和授權真正的幫助。

第一個是Zend_Auth,它是一個處理應用程序認證的組件,它也將幫助處理用戶會話持久性。 Rob Allen has a tutorial幫助您入門。

第二個是Zend_Acl,訪問控制列表組件處理授權,誰有權訪問什麼。 A place to start with Zend_Acl

+0

+1指導提問者正確的資源:) – Karma

相關問題