我正在使用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功能中所述。
我做错了什么?
答案 0 :(得分:2)
首先,您对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