【问题标题】:how to keep the session alive after browser closed in codeigniter?在codeigniter中关闭浏览器后如何保持会话活动?
【发布时间】:2019-06-27 14:29:01
【问题描述】:

我知道我们可以使用 php ini 设置。通过设置会话 cookie 的生存时间增加。但是如何在没有 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;

【问题讨论】:

  • 请添加一些代码
  • 你可以使用离子认证。真的很节省时间benedmunds.com/ion_auth
  • 在 ion auth 中,即使在浏览器关闭后也不会检查会话是否活动
  • @abdulla in codeigniter3 如何设置会话

标签: php codeigniter-3


【解决方案1】:

第一步是在数据库中为该用户 ID 创建一个令牌字段,当我们第一次为用户设置 cookie 令牌创建会话时,在数据库中进行 dupdate。然后每次登录时检查浏览器中的用户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);

【讨论】:

    【解决方案2】:

    您可以通过 IP 启用会话。

    $config['sess_match_ip'] = TRUE;
    

    因此,如果您关闭浏览器并再次打开它,codeigniter CI Session 将检测到相同的 IP 并重新建立会话。 仅当您打开的站点是由同一台PC打开并且同时IP没有更改时才有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-28
      • 1970-01-01
      • 2011-12-17
      • 2012-04-11
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多