Как сохранить флэш-данные в Codeigniter? - PullRequest
2 голосов
/ 20 января 2011

У меня есть контроллер с методом, он перехватывает аргумент и устанавливает его во флэш-переменную.

Вопрос в том ... если я отправлю много аргументов этому методу, используя несколько вкладок Firefox, но одну и ту же сессию пользователя, могут ли они быть смешаны или переписаны?

Я имею в виду, если я открываю вкладку и отправляю аргумент "x" и сохраняюсь во флэш-вар, а в другой вкладке я отправляю аргумент "y" и перезаписываем "x" на "y" или обрабатываем как две разные вещи? (я использую сохраненные сессии)

Также у меня проблемы с хранением флэш-данных. Это не сохранить для следующего использования, если я переключаюсь между разделами. Если я иду, чтобы изменить / вообще, flashdata удаляется (заменяется на 0).

Мой код:

function modify(){
    $section = $this->uri->segment(3);

    switch ($section) {
        case 'identity':
                $this->session->keep_flashdata('item');
                $this->_modify_identity();
            break;
        case 'general':
                $this->session->keep_flashdata('item');
                $this->_modify_general();
            break;
        case 'print':
                echo $this->session->flashdata('item');
            break;
        default:
                if(is_numeric($section)){
                    $this->session->set_flashdata('item', $section);
                }
                redirect('modify/identity');
            break;
    }
}

Ответы [ 3 ]

1 голос
/ 23 февраля 2011

ИМХО, flashdata предназначена для передачи обратной связи после действия. Пользователь отправляет форму или нажимает на какое-либо действие, приложение обрабатывает запрос и устанавливает флэш-данные как ответ «Успех» или «Сбой». Он предназначен для использования сразу после запроса при загрузке следующей страницы.

Учитывая это, маловероятно, что ваш пользователь сможет одновременно отправлять две формы на двух вкладках. Их ответы не могут быть перезаписаны.

Кроме того, я заметил, что данные флэш-памяти отлично работают, используя перенаправление с «обновить» в качестве второго параметра. Иначе, иногда это терпит неудачу.

1 голос
/ 25 июня 2014

Метод $this->session->keep_flashdata($item) сохранит только указанный элемент.С помощью этой функции CI должен сохранять все элементы для запроса следующей страницы:

foreach($this->session->all_userdata() as $key => $val){
  if(strpos($key,'flash:old:') > -1){ // key is flashdata
    $item = substr($key , strlen('flash:old:'));
    $this->session->keep_flashdata($item);
  }
}
0 голосов
/ 21 января 2011

Сессии переносятся по вкладкам.Чтобы проверить это, выйдите из приложения CI на одной вкладке и проследите, чтобы все остальные вкладки попросили вас пройти повторную аутентификацию.

Метод set_flashdata не предназначен для постоянного хранения данных в сеансе,Он предназначен для переноса на страницы таких вещей, как сообщения об ошибках и ошибках.Вам следует использовать метод set_userdata для данных, которые должны сохраняться в течение сеанса (или до тех пор, пока вы не решите удалить их).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...