2015-07-13 3 views
0

Я пытаюсь сохранить 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 с двумя соответствующими словами вызова. Один из них появился в браузере, другой в строке базы данных сеанса. Теперь выясните, почему ...

ответ

0

Выключает контроллер CodeIgniter, который вызывается дважды, потому что я использовал относительный путь в параметре href тега CSS. Это привело к тому, что браузер попытался загрузить таблицу стилей относительно страницы, что вызвало 2-ю загрузку страницы.

Смежные вопросы