簡體   English   中英

應用並在不同的控制器中調用會話

[英]apply and call a session in different controllers

我正在使用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功能中所述。

我究竟做錯了什么?

首先,您對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有一個幫助你入門的教程

第二個是Zend_Acl ,訪問控制列表組件,處理授權,誰有權訪問什么。 一個從Zend_Acl開始的地方

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM