У меня есть сортировка по имени, которая устанавливает массив из примерно 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 и добавлен в, если имя НЕ равно имени базы данных и если имя было изменено.
Все, что он делает, - это сохранить данные в базе данных и не изменять переменные сеанса. В идеале они должны меняться, они меняются, если я выхожу из системы, а затем снова, но это нецелесообразно.
Если я правильно понял, вы хотите убедиться, что пользователь всегда отображает последние данные, даже когда администратор внес некоторые изменения в него, например, к его имени пользователя. Если да, то есть 3 способа сделать это.
Первый
Храните только идентификатор пользователя в сеансе, а также любые данные, которые не нуждаются в обновлении. Затем вы выбираете необходимые данные, например, имя пользователя из базы данных, когда запрос был сделан. Это гарантирует, что все будет всегда актуально.
Второй
Храните идентификатор сеанса пользователя в базе данных, когда он будет создан. Чтобы получить идентификатор сеанса, используйте функцию session_id. Затем вы снова используете функцию session_id, но на этот раз с идентификатором из sesison, который вы хотите уничтожить в качестве первого параметра. например
session_id($old_session_id);
session_start();
session_destroy();
Это свернет пустой сеанс (и, следовательно, убьет существующий), и уничтожить будет сразу после этого. а затем пользователь должен снова войти в систему, когда он посетит ваш сайт в следующий раз.
Третий
Пусть PHP хранит сеансы в базе данных, таким образом вы можете их модифицировать или просто удалить и заставить пользователя перегружать. Тем не менее, я был бы осторожен с этим решением, поскольку это может быть излишним, первый из них очень распространенный, второй - отличный способ.
объяснение
Причина, по которой это не работает, заключается в том, что сессия все еще содержит старые данные, которые были установлены ранее. Если пользователь обновляет свое имя пользователя, то вы также можете установить его на сеанс, но если администратор делает это (или любой другой, кроме самого пользователя), имя пользователя (как пример, это может быть, конечно, что-то еще ) в сеансе не изменится.
Может быть, потому, что вы получаете переменную $ logged_in и пытаетесь вернуть другую переменную с именем "username". Если я правильно понимаю вашу проблему, вам нужно сохранить logged_in:
$username['name'] = $name;
$this->session->unset_userdata('logged_in');
$this->session->set_userdata('logged_in',$username);