首先,我是一名Laravel程序员,试图理解这个旧的codeginter系统。 我需要避免同一个用户多次登录。 我需要登录后没有人可以使用该帐户登录。
我只是设法修改了应用程序/控制器/后端/身份验证中的函数 logout(.php
public function logout() {
$logout = $this->ion_auth->logout();
// 20200117 2355 : agrego |--
$user_x = $this->codegen_model->row('users', '*', "id='" . $this->session->userdata('user_id') . "'");
if( !is_null($user_x) ){
$data = array(
'ip_address' => (binary)''
);
$this->codegen_model->edit( 'users', $data, 'id', $user_x->id );
}
// --|
redirect(base_url() . 'web_ctrl', 'refresh');
}
以及应用程序/模型/ion_auth_model.php中的功能username_check
/**
* Checks username
*
* @return bool
* @author Mathew
**/
public function username_check($username = '')
{
$this->trigger_events('username_check');
if (empty($username))
{
return FALSE;
}
// 20200117 2355 : agrego |--
$user_x = $this->codegen_model->row('users', '*', "username='" . $username . "'");
if (!is_null($user_x)) {
if( $user_x->ip_address != (binary)'' )
return FALSE;
else {
$data = array(
'ip_address' => (binary) inet_pton($this->input->ip_address())
);
$this->codegen_model->edit('users', $data, 'id', $user_x->id);
}
}
// --|
$this->trigger_events('extra_where');
return $this->db->where('username', $username)->count_all_results($this->tables['users']) > 0;
}
如果表用户中的"ip_address"为空,我只是简单地让用户登录,如果不是,则在username_check中阻止(返回 FALSE(。
这有效但在会话到期时失败(应用程序/控制器/后端/身份验证.php logout(( 未触发(,而是触发库/会话/MY_Session sess_destroy(( 但我无法从那里修改数据库:
// 20200117 2355 : agrego |--
class MY_Session extends CI_Session{
public function __construct() {
parent::__construct();
}
function sess_destroy() {
$data = array(
'ip_address' => (string) ''
);
$this->db->update($this->tables['users'], $data, array('id' => $this->session->userdata('user_id')));
//call the parent
parent::sess_destroy();
}
}
// --|
说$this-->db为空...
那么,我如何不能在会话到期时修改数据库?
看起来你正在使用ion_auth脚本...尝试将您的 Crip 放入 Ion Auth 库中的注销功能下...这取决于您如何安装脚本ion_auth。如果您将其安装为第三方应用程序,则可以third_party文件夹中找到它...查找库文件夹,而不是您可以在以下位置找到离子身份验证库...打开它并找到注销功能,然后将脚本放在调用 sess_destroy(( 之前