Php 在不同控制器中应用和调用会话

Php 在不同控制器中应用和调用会话,php,zend-framework,session,authentication,Php,Zend Framework,Session,Authentication,我正在使用zend框架。我已经建立了一个简单的登录屏幕。当用户登录时,我想设置一个会话,然后在成员区域控制器的init函数中检查会话并授予访问权限,否则重定向到登录屏幕 我已经这样设置了登录控制器,这将检查用户名和密码并设置会话: if (isset($_POST['loginSubmit']) && $form->isValid($_POST)){ $inputtedUsername = $_POST['username'];

我正在使用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=新的Zend_会话_名称空间('loggedIn')

当我使用正确的凭据登录时,它会将我重定向到else函数中所述的登录屏幕


我做错了什么?

首先,您对Zend_会话_名称空间的使用不完整(您从未为名称空间赋值):

代码的结构方式任何分配给
$loggedIn->success
的值都将返回true,因此可以尝试:

$loggedIn = new Zend_Session_Namespace('loggedIn');//here you created a namespace
$loggedIn->success = true;
虽然这可能会解决您当前的问题,但我建议您看看两个Zend组件,它们可以真正帮助您进行身份验证和授权

第一个是处理应用程序身份验证的组件,它还将帮助处理用户会话持久性。来帮助你开始

第二个是访问控制列表组件,处理授权,谁有权访问什么

$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 = new Zend_Session_Namespace('loggedIn');//here you created a namespace
$loggedIn->success = true;