繁体   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