在 codeigniter 中关闭浏览器后如何保持会话活动?
how to keep the session alive after browser closed in codeigniter?
我知道我们可以使用 php ini 设置。通过设置session cookie life time增加。但是如何在没有 php ini 设置的情况下在 codeigniter 中做到这一点。
我的配置文件
$config['sess_driver'] = 'database';
$config['sess_use_database'] = TRUE;
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 60 * 60 * 24 * 180;
$config['sess_save_path'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 0;
$config['sess_regenerate_destroy'] = FALSE;
您将通过 IP 启用会话。
$config['sess_match_ip'] = TRUE;
因此,如果您关闭浏览器并再次打开它,codeigniter CI 会话将检测到相同的 IP 并重新建立会话。
仅当您打开的网站是同一台PC打开的并且IP同时没有改变时才有效。
第一步是在数据库中为该用户 ID 创建一个令牌字段,当我们第一次为用户创建会话时,在数据库中设置 cookie 令牌一个更新。然后每次登录时从浏览器检查用户 cookie 并检查匹配的数据库令牌并为用户启动会话。
请检查我下面的代码
$values = array(
'user_id' => $row->id,
'logged_in' => TRUE,
'role' => $row->role_id,
'email' =>$row->email
);
$this->session->set_userdata($values);
$cookie = array(
'name' => 'token',
'value' => generateRandomString() ,
'expire' => '1209600',
'domain' => domain() ,
'path' => '/'
);
set_cookie($cookie);
$update = array(
'token' => $cookie['value'],
);
$this->db->where('id', $row->id);
$this->db->update('user', $update);
if ($CI->session->userdata('logged_in')==1 && $CI->session->userdata('user_id')) {
$query = $CI->db->query("select * from user where token= '".$token."' and role_id=2");
$result = $query->row();
if($result->token==$token){
$values = array(
'user_id' => $result->id,
'logged_in' => TRUE,
'role' => $result->role_id,
'email' =>$result->email
);
$CI->session->set_userdata($values);
我知道我们可以使用 php ini 设置。通过设置session cookie life time增加。但是如何在没有 php ini 设置的情况下在 codeigniter 中做到这一点。
我的配置文件
$config['sess_driver'] = 'database';
$config['sess_use_database'] = TRUE;
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 60 * 60 * 24 * 180;
$config['sess_save_path'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 0;
$config['sess_regenerate_destroy'] = FALSE;
您将通过 IP 启用会话。
$config['sess_match_ip'] = TRUE;
因此,如果您关闭浏览器并再次打开它,codeigniter CI 会话将检测到相同的 IP 并重新建立会话。 仅当您打开的网站是同一台PC打开的并且IP同时没有改变时才有效。
第一步是在数据库中为该用户 ID 创建一个令牌字段,当我们第一次为用户创建会话时,在数据库中设置 cookie 令牌一个更新。然后每次登录时从浏览器检查用户 cookie 并检查匹配的数据库令牌并为用户启动会话。 请检查我下面的代码
$values = array(
'user_id' => $row->id,
'logged_in' => TRUE,
'role' => $row->role_id,
'email' =>$row->email
);
$this->session->set_userdata($values);
$cookie = array(
'name' => 'token',
'value' => generateRandomString() ,
'expire' => '1209600',
'domain' => domain() ,
'path' => '/'
);
set_cookie($cookie);
$update = array(
'token' => $cookie['value'],
);
$this->db->where('id', $row->id);
$this->db->update('user', $update);
if ($CI->session->userdata('logged_in')==1 && $CI->session->userdata('user_id')) {
$query = $CI->db->query("select * from user where token= '".$token."' and role_id=2");
$result = $query->row();
if($result->token==$token){
$values = array(
'user_id' => $result->id,
'logged_in' => TRUE,
'role' => $result->role_id,
'email' =>$result->email
);
$CI->session->set_userdata($values);