Mysql 如何在会话变量中更新已更改的用户名而不注销或销毁会话

Mysql 如何在会话变量中更新已更改的用户名而不注销或销毁会话,mysql,codeigniter,Mysql,Codeigniter,问题: 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);

问题:

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;
  }
}
如何在会话变量中更新已更改的用户名而不注销或销毁会话

例如:

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;
  }
}
我使用用户名“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;
  }
}
注意:

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框架


请帮助我的朋友…

将此功能插入控制器,并在用户信息更新时调用它

//$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);
}

我现在真的明白问题所在了。您正在将“登录”设置为数组。不确定这是否常见,但我通常会将“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\u soft\u model
中添加一个名为“updateUser”的函数或类似的函数。调用该函数时,您可以更新所需的所有会话数据。

您的问题是什么?您可以在任何时间点更新会话变量。如何更改codeigniter中的会话变量值必须遵循codeigniter手册中的代码或已发布的代码。但是,在下一页中,当您更改/更新会话变量时,需要了解什么是重要的。设置会话变量也一样-您可以在第一页设置它-您可以在第二页检查它。在创建登录/注销时,了解这一点尤其重要。这也是为什么你会看到一些人在会话更改(如注销)后进行重定向,迫使浏览器转到第二个页面。这看起来像是匆忙的回答。没有函数名,“session->userdata”函数将只返回会话数据,而不会按照问题中的要求进行更新。很抱歉。。。我把两者都弄糊涂了,没问题。现在看起来好多了。但是,不要认为它需要它自己的功能。如果现在有更新电话,用户名更新可能是最好的选择。(并不是说你的答案不正确,只是提醒用户3482165将会话更新放在何处。但这仍然是更好的做法,两种方法都可以在一行中完成,尽管函数的优点是,当我们想添加一些需要与只更新用户名一起完成的事情时,函数将派上用场。如何调用此函数?我正在使用$this->update_session();调用此函数。但它仍然没有更改会话值。@user3482165,更新后的函数对您有效吗?