Zend сеанс сбрасывается, когда пользователь переключается между страницами
Я изучаю Zend Framework и имею проблемы с Zend_Session_Namespace.
Вот сценарий:
- Домашняя страница (пользователь нажимает на контроллер входа в систему)
- страница входа (аутентификация пользователя выполнена-> Контроллер входа)
- При успешном входе в систему: Создайте новый zend_Session_Namespace("вход в систему") и перенесите его на другую страницу с помощью кнопки домашней страницы.
- Пользователь нажимает кнопку домашней страницы. Я могу получить доступ к имени пользователя из сеанса и отобразить приветственное сообщение.
Пользователь снова нажимает на страницу входа. Я проверяю isset($session->name), чтобы снова запретить вход и перевести его на другую страницу. -> Я терплю неудачу здесь. Сессия как-то сбрасывается, я совершенно не уверен, что мне не хватает.
class IndexController extends Zend_Controller_Action { public function init() { } public function indexAction() { $session = new Zend_Session_Namespace("login_session"); //Check if the session is already valid if(isset($session->name)) { $this->view->userLoggedIn="true"; $this->view->name=$session->name; } } } class LoginController extends Zend_Controller_Action { public function loginaction(){ $session = new Zend_Session_Namespace("login_session"); if(isset($session->name)){ //Redirect to New Page-Already Logged In } else { //Authenticate the user and if login is successful $session->name="USER_NAME"; } } }
Благодарю вас.
1 ответ
Этот код выглядит хорошо, за исключением ранее упомянутой опечатки.
Возможно и вероятно, что где-то еще в вашем коде вы случайно перезаписали пространство имен сеанса. Я думаю, что мы все сделали это хотя бы один раз.
Я бы посоветовал вместо того, чтобы пытаться развернуть свое собственное решение для аутентификации, используйте то, которое предоставляет ZF: Zend_Auth
базовый вход / выход из Zend_Auth может выглядеть так:
//non production code for example only
public function loginAction()
{
$form = new Application_Form_Login();
if ($this->getRequest()->isPost()) {
if ($form->isValid($this->getRequest()->getPost())) {
$data = $form->getValues();
$authAdapter = new My_Auth_Adapter($data['username'], $data['password']);
//authenticate
$result = $authAdapter->authenticate();
if ($result->isValid()) {
//store the user object
$auth = Zend_Auth::getInstance();
//access Zend_Auth session namespace
$storage = $auth->getStorage();
$storage->write($authAdapter->getUser());
//add message to flashmessenger
$this->message->addMessage('Welcome');
//redirect to the homepage
return $this->_redirect('/');
} else {
//handle authentication errors
$this->view->loginMessage =
"Sorry, your username or password was incorrect";
}
} else {
//handle form validation errors
$this->_redirect('/users/index/register');
}
} else {
//if not post render empty form
$this->view->form = $form;
}
}
public function logoutAction()
{
$authAdapter = Zend_Auth::getInstance();
$authAdapter->clearIdentity();
}
Удачи!