如何更改用户名并更新会话?

时间:2014-11-18 14:33:55

标签: php codeigniter session

我的登录已经排序,它设置了大约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语句之外定义的,如果名称不等于数据库名称并且名称已更改,则添加到输入数组。

所有这一切,都是将数据保存到数据库中,并且不会更改会话变量。理想情况下,他们需要改变,如果我注销然后重新开启,他们确实会改变,但这是不切实际的。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望确保用户始终显示最新数据,即使管理员对其进行了一些更改,例如他的用户名。如果是这样,那么有3种方法可以做到这一点。

第一个

仅存储会话中的用户ID以及不需要更新的任何数据。然后,您可以选择所需的数据,例如请求发出时来自数据库的用户名。这将确保一切都始终是最新的。

第二个

在创建时,将用户的会话ID存储在数据库中。要获取会话ID,请使用 session_id函数。然后再次使用 session_id函数,但这次使用sesison中要作为第一个参数销毁的id。 e.g

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

这将创建一个空的会话(因此杀死现有的会话),然后销毁就在那之后。然后用户下次访问您的网站时必须再次登录。

第三个

让PHP将会话存储在数据库中,这样您就可以修改它们或简单地删除它们并强制用户重新登录。然而,我会小心这个解决方案可能是一个矫枉过正,第一个是非常常见的,第二个也是一个很好的方式。

<强>解释

之所以不起作用的原因是会话仍然包含先前设置的旧数据。如果用户自己更新了他的用户名,那么你也可以在会话中设置它,但是如果管理员这样做(或者除了用户自己之外的任何其他人),用户名(例如,它当然可以是其他任何东西) )在会话中不会改变。

答案 1 :(得分:0)

也许是因为你得到变量$ logged_in并试图放回另一个名为“username”的变量。如果我理解你的问题,你需要保存logged_in:

$username['name'] = $name;
$this->session->unset_userdata('logged_in');
$this->session->set_userdata('logged_in',$username);