Я реализовал несколько другое решение на CodeIgniter 3.
Я рассматриваю опцию "Помни меня" как продление времени сеанса. И. е. стандартное время сеанса 2 часа, продлено 7 дней.
Для этого:
1 - добавить флажок запомнить меня и скрытое поле в форму
echo form_hidden('remember_me', '0');
echo form_checkbox('remember_me', '1');
2 - добавить ниже к конфигурации (config.php
)
$config['sess_expiration'] = 72000; // standard time, 2hrs
$config['sess_extended_expiration'] = 604800; // extended time, 7 days
3 - Создать MY_Session.php
в каталоге application/libraries/Session
.
4 - поставить ниже код
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class MY_Session extends CI_Session {
public function __construct(array $params = array())
{
parent::__construct($params);
// No session time manipulation
if (!isset($this->_config['sess_extended']))
{
return $this;
}
if ($this->_config['sess_extended'])
{
// Remember for next regenerate execs
setcookie(
'remember_me',
'1',
(empty($this->_config['cookie_lifetime']) ? 0 : time() + $this->_config['cookie_lifetime']),
$this->_config['cookie_path'],
$this->_config['cookie_domain'],
$this->_config['cookie_secure'],
TRUE
);
}
else
{
// Forget remember me
setcookie(
'remember_me',
NULL,
-1,
$this->_config['cookie_path'],
$this->_config['cookie_domain'],
$this->_config['cookie_secure'],
TRUE
);
}
}
protected function _configure(&$params)
{
// Restore standard session time
if (filter_input(INPUT_POST, 'remember_me') === '0')
{
$params['sess_extended'] = false;
return parent::_configure($params);
}
// Extend session time
elseif (filter_input(INPUT_POST, 'remember_me') === '1' || (isset($_COOKIE['remember_me']) && !empty($_COOKIE['remember_me'])))
{
if (!empty(config_item('sess_extended_expiration')))
{
$_config[0] = & get_config();
$_config[0]['sess_expiration'] = config_item('sess_extended_expiration');
$_config[0]['sess_time_to_update'] = 0;
$params['sess_extended'] = true;
}
}
return parent::_configure($params);
}
}
Нет никаких последствий для безопасности, это только расширенное время сеанса.
Также помните, что сервер должен разрешать длительное время сеанса. Вы можете проверить текущий таймаут по
var_dump(ini_get('session.gc_maxlifetime'));