Не удается использовать Zend_Session_Namespace в SocialEngine - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь использовать 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 Ответ

0 голосов
/ 12 сентября 2018

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

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

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

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

...