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,更新后的函数对您有效吗?