2013-06-06 4 views
0

Я использую flashdata для CodeIgniter для хранения своего слова captcha для следующего запроса. Он отлично работает на локальном сайте, но не на сервере. Между этими двумя кодами нет разницы.CodeIgniter Flashdata не работает на сервере

Мне интересно, для функции flashdata требуется дополнительный плагин или конфигурация для apache/php.

Вот как я установил данные:

$this->session->set_flashdata('captchaWord', $cap['word']); 

и это, как я получить его:

if (strcasecmp($this->input->post('captchaWord'), $this->session->flashdata('captchaWord')) != 0) 

Любые идеи?

+0

flashdata требует использования библиотеки сеанса - который либо сохраняется в базе данных или куки (на основе значения в вашей конфигурации файл). Там не должно быть ничего, что apache или php отсутствует, чтобы это работало. Либо у вас есть проблемы с записью в базу данных, либо, может быть, с проблемами безопасности, создающими данные в cookie. – swatkins

ответ

1

Это не так. Что-то странное происходит с вашим сервером.

Убедитесь, что соединение с базой данных выполняется, если вы используете сеансы базы данных.

Проверьте, что вы перенаправляете на тот же сервер.

Убедитесь, что используете flashdata правильно. (Почтовый код?)

Проверьте, что переменные сеанса работают вообще.

Update:

// Again, be sure that 'session' is autoloaded in config.php 
class Test_Controller { 
    public function page1() 
    { 
     $this->session->set_flashdata('test', 'HELLO WORLD'); 
     redirect('test/page2'); 
    } 
    public function page2() 
    { 
     echo $this->session->flashdata('test'); 
    } 
} 

Добавить этот контроллер и посетить http://yourserver.com/index.php/test/page1

Он должен перенаправлять на PAGE2 и отображения 'привет мир'.

Если это так, то это проблема с вашим кодом. Если это не так, я бы предложил загрузить виртуальную машину с ОС и установить новую копию веб-сервера и повторить попытку.

+0

Нет базы данных, нет безопасных сеансов. Другие переменные сеанса работают. Я обновил сообщение с кодом. – emjay

+0

Обновлен мой ответ –

0

Проверьте, не вызывает ли Codeigniter вызов контроллера дважды, и в этом случае он очищает данные flashdata между первым и вторым вызовами (см. Ответ на вопрос Codeigniter flash data not working in certain browsers).

Существуют случаи Codeigniter, в которых контроллер может вызываться дважды. Например, пакет корзины покупок GoCart, построенный на Codeigniter, имеет вспомогательную функцию для принудительного SSL, изменяя http на https и делая перенаправление на новый URL. Если функция используется в конструкторе, контроллер в конечном итоге вызывается дважды, один раз без и один раз с SSL. Любые flashdata теряются при втором вызове.

По другому аналогичному вопросу (CodeIgniter: setting flash data not working) вы можете использовать $ CI-> session-> keep_flashdata() для сохранения flashdata через дополнительные запросы.

Ответ на этой странице делает хорошую работу объяснения проблемы и обходной путь: CodeIgniter "flashdata" doesn't work

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