CodeIgniter "flashdata" не работает
Я использую CodeIgniter 2.1.0, я хочу, чтобы после ввода данных в базу данных получилось сообщение типа "Ваша информация была успешно обновлена". Для этой работы у меня в CI_Controller следующая функция:
function myCiInser(){
... Here is my query ...
//$data: this var is result query that is true
if($data){
$this -> session -> set_flashdata('message', 'Your information was successfully updated.');
redirect('url/myurl');
}
}
И я имею в виду, как:
<?php
$message = $this->session->flashdata('message');
if($message){
echo '<div id="error_text">' . $message . '</div>';
}
//I test this : "echo $message;" but don't give output
?>
Но я не предоставляю сообщение, но redirect
выполняется и работает true. и в базе данных в таблице ci_sessions
column user_data
у меня есть это:
а: 2: {s: 9: "user_data"; s: 0: "; s: 19:" вспышка: новый: сообщение "; s: 42:" Вы информация была успешно обновлена. ";}
Как решить эту проблему?
UPDATE:
У меня была следующая ошибка (я использую из chorme и Ctrl + Shift + j, чтобы получить это предупреждение):
Не удалось загрузить ресурс: сервер ответил статусом 404 (Не найдено)
И я исправлю это (теперь у меня нет этой ошибки), но все равно та же проблема в отображаемом сообщении. что я делаю?
Ответы
Ответ 1
Из документа Codeigniter Session Class, касающегося Flashdatastrong > , мы можем прочитать:
CodeIgniter поддерживает "flashdata" или данные сеанса, которые будут только доступны для следующего запроса сервера и затем автоматически очищено.
Проблема может заключаться в том, что при перенаправлении процесс принимает более одного запроса, очищая ваши flashdata.
Чтобы убедиться, что этот случай, просто добавьте следующий код в конструктор контроллера, на который вы перенаправляете:
$this->session->keep_flashdata('message');
Это сохранит данные flashdata для другого запроса на сервер, что позволит ему впоследствии использовать.
Ответ 2
У меня тоже была эта проблема. Я не помню, где я видел, но здесь мое решение.
redirect('url/myurl','refresh');
CodeIgniter не рассматривал перенаправление как другой запрос. Поэтому flashdata не была настроена в перенаправлении, но она была на следующей странице, которую я загрузил.
Ответ 3
//Установите данные флэш-памяти в файл нашего контроллера
$this->session->set_flashdata('sessionkey', 'Value');
//После этого нам нужно использовать функцию перенаправления
redirect("admin/signup");
//Получить данные Flash в представлении
$this->session->flashdata('sessionkey');
Ответ 4
Использование сессий с базой данных иногда вызывало у меня проблемы. Я рекомендую установить $config['sess_use_database'] = FALSE;
в config.php и посмотреть, работает ли flashdata нормально.
Ответ 5
Вы также можете использовать базу данных для сеансов, но вы должны установить элементы конфигурации:
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = FALSE;
Таким образом, сессия flashdata будет работать снова
Ответ 6
За исключением одной страницы, я могу отображать/передавать значения, используя сеанс. Я попытался использовать var_dump($this->session)
и я получаю:
["flash:old:Array"]=> bool(false)
["flash:new:message"]=> string(10) "My Message"
Я попытался отобразить данные флэш-памяти на странице без перенаправления сразу после установки данных, но результат был таким же. Я рекомендую урезать код и попытаться установить сессию на других страницах. Если проблема не устраняется, проверьте ваш var_dump
. Это может не быть решением, но я думаю, что это может помочь.
ОБНОВЛЕНИЕ: сокращены пробелы и переводы строк в тексте. Я передавал 2 длинных предложения с пустыми переносами строк и пробелами.
if (0) //Assume this condition is false
{
$this->load->view('error_page');
// Generate validation error
}
else
{
//Show success message
$data = array(
'message' => 'My message'
);
$this->session->set_flashdata($data);
$this->session->keep_flashdata($data);
echo $this->session->flashdata('message');
//echo var_dump($this->session);
//redirect(base_url().'success_page');
}
Ответ 7
У меня такая же проблема. После проверки кода, который я обнаружил, я звоню $this->session->sess_destroy();
, что вызывает проблему.
Ответ 8
404 (не найден) считается 1 запросом сервера. он удалит ваши flashdata.
Ответ 9
Как я наблюдаю за codeigniter flashdata.
Когда я использую его во втором запросе с использованием метода codeigniter redirect(), он отлично работает в mozila, но в случае хром он не работает.
Ответ 10
Я знаю, что я очень опаздываю, но у меня была эта проблема, и я не мог поверить, что в моем случае решение было очень легким.
просто замените
$this->session->flashdata('message');
к
print_r($this->session->flashdata('message'));
Ответ 11
У меня была открыта консоль разработчика Chrome и удалены флэш-данные. После закрытия и повторной попытки он работает. Версия 71.0.3578.98 (Официальная сборка) (64-разрядная версия)