Не удается использовать Zend_Session_Namespace в SocialEngine

Я пытаюсь использовать Zend_Session_Namespace, чтобы помочь мне с задачей изменения пароля пользователя. Для этого мне нужно сохранить некоторые значения их запроса GET при первом посещении страницы сброса. Я хотел бы сделать это с Zend_Session_Namespace. Затем я хочу обновить пароль пользователя в его почтовом запросе (с той же страницы), используя значения, которые я сохранил в Zend_Session_Namespace. Проблема в том, что значения, сохраненные в Zend_Session_Namespace, являются нулевыми, когда я к ним обращаюсь. Тем не менее, я все еще могу сделать работу с типичным $_SESSION переменная. Кто-нибудь знает, где я не прав? Я пропускаю некоторые советы по использованию Zend_Session_Namespace? Нужно ли использовать Zend_Registry или что-то в этом роде?

Мой код для действия выглядит следующим образом:

/**
 * This handles password change
 */
public function changepasswordAction() {        
    $passwordForm = new Advancedsms_Form_ChangePassword();
    $this->view->form = $passwordForm;

    //If it is NOT post, the user has to provide recovery code and phone number
    if(!$this->getRequest()->isPost()) {
        $phone = filter_input(INPUT_GET, 'phone', FILTER_SANITIZE_URL);
        $recovery = filter_input(INPUT_GET, 'recovery', FILTER_SANITIZE_URL);
        $this->session= new Zend_Session_Namespace('RecoverySession');
        $this->session->phone= $phone;
        $this->session->recoveryCode = $recovery;   
        print_r($this->session);
        $_SESSION['phone'] = $phone;
        $_SESSION['recovery'] = $recovery;
    }
    if($this->getRequest()->isPost()) {            
        $params = $this->getRequest()->getParams();
        print_r($params);
        echo 'phone: ' . $this->session->phone .PHP_EOL;
        echo 'recovery: ' . $this->session->recoveryCode . PHP_EOL;
        echo $_SESSION['phone'] . ',' . $_SESSION['recovery'];
    }
}

1 ответ

Решение

Вам нужно переместить эту строку:

$this->session= new Zend_Session_Namespace('RecoverySession');

до, если заявления. На данный момент ваш echo 'phone: ' . $this->session->phone линия ничего не будет делать, потому что $this->session не устанавливается на запросы POST.

Вы всегда должны писать код PHP с уровнем ошибок PHP, максимально приближенным к значению, которое будет отображать предупреждения для подобных проблем.

Другие вопросы по тегам