Обновление данных сеанса не работает - CodeIgniter - PullRequest
0 голосов
/ 21 марта 2020

Моя проблема проста: в моей таблице есть поле с именем credit.

Я хочу добавить 1 credit подключенному пользователю, поэтому я обновляю поле credit. Обновление работает хорошо, но когда я хочу отобразить credit, добавление не было сделано.

Пример: пользователь Joe зарегистрировался с 2 credit. Я добавляю его 1 credit. Он работает в базе данных, но не на экране. Проблема решается, если он отключается и снова подключается.

Итак, я хотел бы знать, как я могу обновить данные сеанса, не отключая

Контроллер 'LoginArea'


$this->load->library('session');
$dataUser = array(
    'id' =>     $ligneBDD->{'id_user'},
    'name' =>   $ligneBDD->{'name'},
    'credit' => $ligneBDD->{'credit'}
);

// i store id, name and credit in my session
$this->session->set_userdata('data', $dataUser);


И это мое обновление:

$update= $this->User_model->update(array(
                                    'credit' => $userConnected['credit'] - 1
                                        ),  
                                        array(
                                        'id_user' => $userConnected['id'])
                                        );

1 Ответ

0 голосов
/ 21 марта 2020

Вы должны смотреть на сеанс как ( временное ) «Состояние» для определенного c пользователя.

Если выполняется вход в систему (LoginArea), текущий пользователь -Данные (и кредиты) извлекаются из вашей базы данных (БД постоянное хранилище / состояние). Эти данные пользователя затем сохраняются в сеансе.

Но и сеанс, и БД разделены и не подключены .

Так что, если вы измените БД, это изменение не отражается в сеансе и наоборот.

Когда вы сейчас обновляете свою БД, вам также необходимо обновить сеанс. Так что здесь у вас есть два возможных решения:

  1. Самое простое решение - переместить код для инициализации сеанса в метод и вызвать его снова после обновления базы данных
  2. или после обновления базы данных, загрузить текущий сеанс, обновить только credit атрибут и сохранить его снова в сеансе (перезаписать)

==> новые (обновленные) данные будут присутствовать в Session-UserData

...