как сохранить сеанс после закрытия браузера в codeigniter?

1

Я знаю, что мы можем сделать, используя настройки php ini. путем установки увеличения продолжительности жизни файлов cookie сеанса. Но как это сделать в codeigniter без настроек php ini.

мой конфигурационный файл

$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;
  • 0
    добавьте код пожалуйста
  • 0
    Вы можете использовать ионную аутентификацию. это действительно экономит время benedmunds.com/ion_auth
Показать ещё 2 комментария
Теги:
codeigniter-3

2 ответа

1
Лучший ответ

первый шаг - создать поле маркера в databse для этого идентификатора пользователя, и когда мы впервые создаем сеанс для пользовательского набора маркеров cookie, дублируем в databse. а затем каждый раз при входе в систему проверять этот файл 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);
0

Вы включили сеанс по IP.

$config['sess_match_ip'] = TRUE;

Поэтому, если вы закроете свой браузер и снова запустите его, сеанс Cignigniter CI будет обнаруживать один и тот же IP-адрес и восстанавливать сеанс. Работает только в том случае, если вы открываете сайт, который открывается одним и тем же ПК, и IP-адрес не изменился.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню