如何在没有注销或会话销毁的情况下更新会话变量中已更改的用户名

时间:2014-03-31 17:38:18

标签: mysql codeigniter

问题:

如何在没有注销或会话销毁的情况下更新会话变量中已更改的用户名?

例如:

我使用用户名登录" Ram"并且这个用户名存储在会话变量User_Name中,登录后我正在更改我的用户名" Ram"进入" Kumar"。因此,这个新更改的用户名应自动更新为会话变量User_Name,而无需从我的帐户注销。

登录的示例控制器代码:

function check_database($password)
{
  // Field validation succeeded.  Validate against database
  $username = $this->input->post('username');

  // query the database
  $result = $this->civic_soft_model->login($username, $password);

  if($result)
  {
    $sess_array = array();
    foreach($result as $row)
    {
      $sess_array = array(
        'UID' => $row->UID,
        'User_Name' => $row->User_Name,
        'User_Type' => $row->User_Type,
        'User_OTP' => $row->User_OTP
        // 'Login_Status' => $row->Login_Status
        // 'Node_Id' => $row->Node_Id
      );
      $this->session->set_userdata('logged_in', $sess_array);
    }
    return TRUE;
  }
  else
  {
    $this->form_validation->set_message('check_database', 'Invalid username or password');
    return false;
  }
}

注意:

我正在使用PHP,MySQL和CodeIgniter MVC框架。

请帮助我的朋友......

2 个答案:

答案 0 :(得分:1)

我实际上看到了现在的问题。您将'logged_in'设置为数组。不确定这是否常见,但我通常做的是将'logged_in'设置为布尔值,并将userdata设置为我在另一个数组中需要的数据。

但是,对于你的情况,你可以试试这个:

  $newUserData = $this->session->userdata('logged_in');
  if (is_array($newUserData)) {
      $newUserData['User_Name'] = $new_username;
      $this->session->set_userdata('logged_in', $newUserData);
  }

为了更好的可用性,我会向$this->civic_soft_model添加一个名为“updateUser”的函数或类似的东西。当调用该函数时,您可以更新所需的所有会话数据。

答案 1 :(得分:0)

将此功能插入您的控制器,并在对用户信息进行更新时调用它。

//$new_username : the username inputted by user when he is trying to update his account
function update_session($new_username){
    $this->session->set_userdata('User_Name', $new_username);
}