Я пытаюсь использовать 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'];
}
}
Вам нужно переместить эту строку:
$this->session= new Zend_Session_Namespace('RecoverySession');
до, если заявления. На данный момент ваш echo 'phone: ' . $this->session->phone
линия ничего не будет делать, потому что $this->session
не устанавливается на запросы POST.
Вы должны всегда писать код PHP с уровнем ошибок PHP, максимально приближенным к значению, которое будет отображать предупреждения для подобных проблем.
Других решений пока нет …