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, касающегося Flashdata​​strong > , мы можем прочитать:

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-разрядная версия)