2013-05-12 1 views
0

Zend Framework를 배우고 Zend_Session_Namespace에 문제가 있습니다. 여기 사용자가 페이지 간을 전환 할 때 세션이 다시 설정되지 않습니다.

는 시나리오 :

  1. 홈페이지 (로그인-지수 컨트롤러에 사용자가 클릭)
  2. 로그인 페이지 (사용자 인증이 done-> 로그인 컨트롤러) 로그인에 성공한
  3. : 새 만들기 zend_Session_Namespace ("login")을 찾아 홈 페이지 버튼이있는 다른 페이지로 이동하십시오.
  4. 사용자 홈 페이지 버튼을 클릭합니다. 세션에서 사용자 이름에 액세스하여 환영 메시지를 표시 할 수 있습니다.
  5. 사용자가 다시 로그인 페이지를 클릭합니다. 나는 다시 로그인을 방지하고 대신 다른 페이지로 이동하기 위해 isset ($ session-> name)을 검사합니다. 나는 여기서 실패하고있다. 세션이 어떻게 든 재설정됩니다, 나는 내가 무엇을 놓치고 있는지 확실히 확신하지 못합니다.

    class IndexController extends Zend_Controller_Action 
    { 
        public function init() 
        { 
        } 
    
        public function indexAction() 
        { 
         $session = new Zend_Session_Namespace("login_session"); 
          //Check if the session is already valid 
         if(isset($session->name)) { 
          $this->view->userLoggedIn="true"; 
          $this->view->name=$session->name; 
         } 
        } 
    } 
    
    
    class LoginController extends Zend_Controller_Action 
    { 
        public function loginaction(){ 
         $session = new Zend_Session_Namespace("login_session"); 
    
         if(isset($session->name)){ 
          //Redirect to New Page-Already Logged In 
         } else { 
          //Authenticate the user and if login is successful 
          $session->name="USER_NAME"; 
         } 
        } 
    } 
    

감사합니다.

+0

코드가 정상적으로 작동하므로 ** loginaction() ** 대신 ** loginAction() **을 대신 사용하십시오. 죄송합니다. 나는 나쁜 영어입니다. –

답변

1

이 코드는 앞에서 언급 한 오타를 제외하고는 괜찮습니다.

코드의 다른 부분에서 세션 네임 스페이스를 실수로 덮어 쓸 가능성이 있습니다. 우리는 적어도 한 번은 그렇게했다고 생각합니다.

내가 대신 자신의 인증 솔루션을 출시 할 노력하는, ZF가 제공하는 하나를 사용하는 것이 제안

: Zend_Auth

기본 Zend_Auth 로그인/로그 아웃과 같습니다

//non production code for example only 
public function loginAction() 
    { 
     $form = new Application_Form_Login(); 

     if ($this->getRequest()->isPost()) { 
      if ($form->isValid($this->getRequest()->getPost())) { 
       $data = $form->getValues(); 
       $authAdapter = new My_Auth_Adapter($data['username'], $data['password']); 
       //authenticate 
       $result = $authAdapter->authenticate(); 
       if ($result->isValid()) { 
        //store the user object 
        $auth = Zend_Auth::getInstance(); 
        //access Zend_Auth session namespace 
        $storage = $auth->getStorage(); 
        $storage->write($authAdapter->getUser()); 
        //add message to flashmessenger 
        $this->message->addMessage('Welcome'); 
        //redirect to the homepage 
        return $this->_redirect('/'); 
       } else { 
        //handle authentication errors 
        $this->view->loginMessage = 
         "Sorry, your username or password was incorrect"; 
       } 
      } else { 
       //handle form validation errors 
       $this->_redirect('/users/index/register'); 
      } 
     } else { 
      //if not post render empty form 
      $this->view->form = $form; 
     } 
    } 

    public function logoutAction() 
    { 
     $authAdapter = Zend_Auth::getInstance(); 
     $authAdapter->clearIdentity(); 
    } 

http://www.ens.ro/2012/03/20/zend-authentication-and-authorization-tutorial-with-zend_auth-and-zend_acl/

행운을 비네!