Как я могу изменить имя пользователя и обновить сеанс?

0

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

Очевидно, что для обычного пользователя было бы глупо выполнять сброс всей сессии, когда они что-то меняют в своей учетной записи. Например, их имя. Мой код работает с базой данных, он вводит имя после изменения пользователем.

$username=$this->session->userdata("logged_in");
if(strlen($name)>=1){
    $databasename = $row->firstname;
        if($name != $databasename){
            $input_array['first']= $name;
            $this->session->unset_userdata($username['name']);
            $this->session->set_userdata($username['name'],$name);
        }
    }

Чтобы добавить некоторый фон в мой код, входной массив определен за пределами операторов if и добавлен в, если имя НЕ равно имени базы данных и если имя было изменено.

Все, что он делает, - это сохранить данные в базе данных и не изменять переменные сеанса. В идеале они должны меняться, они меняются, если я выхожу из системы, а затем снова, но это нецелесообразно.

Теги:
codeigniter
session

2 ответа

2
Лучший ответ

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

Первый

Храните только идентификатор пользователя в сеансе, а также любые данные, которые не нуждаются в обновлении. Затем вы выбираете необходимые данные, например, имя пользователя из базы данных, когда запрос был сделан. Это гарантирует, что все будет всегда актуально.

Второй

Храните идентификатор сеанса пользователя в базе данных, когда он будет создан. Чтобы получить идентификатор сеанса, используйте функцию session_id. Затем вы снова используете функцию session_id, но на этот раз с идентификатором из sesison, который вы хотите уничтожить в качестве первого параметра. например

session_id($old_session_id);
session_start();
session_destroy();

Это свернет пустой сеанс (и, следовательно, убьет существующий), и уничтожить будет сразу после этого. а затем пользователь должен снова войти в систему, когда он посетит ваш сайт в следующий раз.

Третий

Пусть PHP хранит сеансы в базе данных, таким образом вы можете их модифицировать или просто удалить и заставить пользователя перегружать. Тем не менее, я был бы осторожен с этим решением, поскольку это может быть излишним, первый из них очень распространенный, второй - отличный способ.

объяснение

Причина, по которой это не работает, заключается в том, что сессия все еще содержит старые данные, которые были установлены ранее. Если пользователь обновляет свое имя пользователя, то вы также можете установить его на сеанс, но если администратор делает это (или любой другой, кроме самого пользователя), имя пользователя (как пример, это может быть, конечно, что-то еще ) в сеансе не изменится.

  • 0
    Например, если я пользователь (не администратор), и мне нужно изменить свое имя, потому что я получил официальное изменение имени (или что-то подобное), я захожу на сайт, меняю свое имя в 'my страница аккаунта. Это работает нормально, за исключением того, что данные не изменяются до тех пор, пока сеанс не будет уничтожен и сброшен (вход / выход из системы). Данные в базе данных изменены, а данные сеанса - нет.
  • 0
    Да, посмотрите на мое объяснение;)
Показать ещё 2 комментария
0

Может быть, потому, что вы получаете переменную $ logged_in и пытаетесь вернуть другую переменную с именем "username". Если я правильно понимаю вашу проблему, вам нужно сохранить logged_in:

$username['name'] = $name;
$this->session->unset_userdata('logged_in');
$this->session->set_userdata('logged_in',$username);
  • 0
    Сеанс устанавливается как «logged_in», logged_in - это имя массива, если хотите, $ username ['name'] - это элемент массива. Кроме того, $ username = $ this-> session-> userdata ("logged_in); устанавливает переменную username в качестве сеанса. Это то, как я получил доступ к массиву через сайт, не будет ли он работать в этой ситуации?
  • 0
    Нет, это не сработает. Смотри мой ответ.
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню