【问题标题】:apply and call a session in different controllers在不同的控制器中应用和调用会话
【发布时间】:2012-09-03 21:09:18
【问题描述】:

我正在使用 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 函数中所述的登录屏幕。

我做错了什么?

【问题讨论】:

    标签: php zend-framework session authentication


    【解决方案1】:

    首先,您对 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-08
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多