Я пытаюсь сохранить CodeIgniter искаженного помощника вызов слово в переменной сессии, следующий образом:Значение CodeIgniter Captcha, измененное пользовательскими данными сеанса?
$cap = create_captcha($val /* array of params */); // Works fine
$this->session->set_userdata('cap-word', $cap['word']);
Если я эхо $ шапочки [ «слово»] до и после набора сеанса, это правильно (т.е. то, что отображалось в браузере). Если я получу переменную сеанса сразу после ее установки, это также верно.
Однако то, что хранится в сеансе, совершенно другое - это правильная длина (количество символов), но совершенно другая строка. Следовательно, когда я пытаюсь получить пользовательские данные на стороне сервера (проверка правильности), он получает неправильное значение.
(.. Я настроен на «sess_use_database» и проверки значений пользовательских данных в PhpMyAdmin после каждой загрузки страницы шифрования Cookie отключена)
отладки попытки:
- Я попытался предваряя/добавление известных строк в ключевое слово captcha перед сохранением в сеансе. Известные строки вносят его в пользовательские данные сеанса просто отлично, но добавляются/добавляются к некорректному слову captcha.
- Я попытался заменить слово вызова полностью фиксированной строкой. Это делает поездку в оба конца без проблем.
- Я попытался сохранить ключевое слово captcha в другую строковую переменную (вместо того, чтобы передавать ее непосредственно из $ cap ['word]') с тем же результатом; только часть вызова получает «ругательство» при посадке в сеансе.
После отладки, мой код выглядит как:
$cap = create_captcha($vals);
echo("<br>cap = ");
print_r($cap);
echo("<br>cap['word'] = " . $cap['word']);
$theword = $cap['word'];
echo("<br> Before theword = " . $theword);
$this->session->set_userdata('cap-word', $theword . 'abcdefg');
echo("<br> After theword = " . $theword);
echo("<br> Session output = " . $this->session->userdata('cap-word'));
Это дает следующий результат в браузере:
шапочку = Array ([слово] => 5CZaDeHm [время] => 1436765602.678 [изображение] => {изображение})
колпачок [ 'слово'] = 5CZaDeHm
Перед theword = 5CZaDeHm
После theword = 5CZaDeHm
выход Session = 5CZaDeHmabcdefg
Однако то, что хранится в полях таблицы сессии USERDATA (и, таким образом, то, что появляется, когда я называю $ this-> session-> UserData ('шапка-слово') на отправить запрос) является:
a:2:{s:9:"user_data";s:0:"";s:8:"cap-word";s:15:"3g5hb1I3abcdefg";}
Следовательно,
подстрока '5CZaDeHm' в пределах $ theword заменено на 3g5hb1I3 во время вызова $ this-> session-> set_userdata. Я понятия не имею, почему, или даже как это возможно ?!
Обновление 2015-07-13 7:50 EDT: Как обычно, Бритва Оккама применяется.Оказывается на каждой загрузке страницы, мой контроллер вызывается дважды, генерируя 2 изображения captcha с двумя соответствующими словами вызова. Один из них появился в браузере, другой в строке базы данных сеанса. Теперь выясните, почему ...