O identificador de sessão é diferente no PHP 7.1 e não passa na verificação de expressão regular.
Uma correção simples: No arquivo system/libraries/Session/Session.php, por volta da linha 133,
OU ! preg_match('/^[0-9a-f]{40}$/', $_COOKIE[$this->_config['cookie_name']])
remova '{40}$'
OU ! preg_match('/^[0-9a-f]/', $_COOKIE[$this->_config['cookie_name']])
O problema é que o identificador de sessão é removido do cookie devido à incompatibilidade com a expressão regular. Assim, o identificador de sessão é sempre renovado.
Isso pode corrigir a expressão regular e evitar que ela execute a linha "unset($_COOKIE[$this->_config['cookie_name']]);"
Funcionou totalmente para mim!
FYI. Encontrei isso depois de corrigir por conta própria. https://github.com/bcit-ci/CodeIgniter/issues/4830