Pergunta

Como você implementar isso no CodeIgniter?

Foi útil?

Solução

(Esta resposta foi uma resposta à pergunta original)

Como você faria isso? Ou, como seria você cria uma sessão com um longo data de expiração do que os outros?

Todas as sessões criadas usaria o mesmo $ config [ 'sess_expiration'] no arquivo de configuração (padrão: 7200 segundos), há uma maneira de passar um valor personalizado ?

Estendendo a expiração de um cookie de sessão não está indo para o trabalho para um recurso "Remember Me", uma vez que o usuário perderá o seu cookie de sessão quando fechar o navegador. Se Code Igniter não tem um nativo "recurso de lembrar", então você precisa escrever algo para deixar cair um cookie ao longo da vida que contém informações que permitirá um login automático quando o servidor vê-lo novamente.

Há um bom artigo sobre persistente Entrada Biscoito Best Practice , o que pode ser resumida como:

  1. Quando o usuário fizer sucesso com Remember Me marcada, um login cookie é emitido, além do cookie de gerenciamento de sessão padrão. 2
  2. O cookie de login contém o nome do usuário e um número aleatório (O "token" de agora em diante) a partir de um adequadamente grande espaço. O nome de usuário e sinal são armazenados como um par numa banco de dados da tabela.
  3. Quando um não-conectado no usuário visita o site e apresenta um cookie de login, o nome de usuário e Token são procurados no banco de dados. 1. Se o par está presente, o utilizador é considerado autenticado. O símbolo utilizado é removido do base de dados. Um novo token é gerado, armazenadas em banco de dados com o nome de usuário, e emitido para o usuário através de um novo login biscoito. 2. Se o par não estiver presente, o cookie de login é ignorada.
  4. Os usuários que só são autenticados através deste mecanismo são não tem permissão para aceder a determinados informações ou funções protegida como alterar a senha, ver informações de identificação pessoal, ou gastando dinheiro. Para executar os operações, o usuário deve primeiro enviar com sucesso um normais username / formulário de login senha.
  5. Uma vez que esta abordagem permite que o usuário tenha múltiplas lembrado logins de diferentes navegadores ou computadores, é fornecido um mecanismo para o usuário para apagar todos os lembrado logins em uma única operação.

Outro artigo que constrói mais segurança para essas idéias em Improved persistente Entrada Biscoito Best Practice

Se você seguir as práticas nesses artigos, você não vai dar muito errado!

Outras dicas

Você pode querer reconsiderar a sugestão de 'Improved persistente Entrada Biscoito Best Practice'. Eu afixei minha análise do problema no site, mas a essência do que é o seguinte:

Você não pode impedir bolinho roubar sem uma linha segura, não importa o

(* Por 'linha segura', quero dizer SSL / VPN tunneling criptografia / de chave pública - ou uma robusta desafio-resposta esquema *)

Eu sou tudo para melhores práticas de login persistente, mas há um ponto em que nenhuma quantidade de truques vai ajudar, e onde o única caminho para cima é SSL.

Graças para a solução. Eu tenho implementado isso em meu projeto de CI.

DEV Nota: o cookie deve ter um hash garantiu como o me lembro-chave. - não apenas armazenar um user-id) - não guarde uma senha, - e não armazenar hash da senha. Dessa forma, as pessoas não podem fazer logon automaticamente em qualquer conta.

pior cenário: Assim que um hacker descobre o método de hash, você pode ajustar a função da tecla produtor em um lugar e você está configurado novamente com segurança. Gostaria apenas de ajustar as cordas de sal e pimenta.

Espero que ajude. Chris D. - da Austrália:)

Por estas coisas, as variáveis ??CI em todas as classes podem ser acessados ??por sua própria biblioteca:

Por exemplo:

$this->session->sess_expiration = 500000;

Hope que resolverá o problema.

existe biblioteca no github para se lembrar de mim baixá-lo.

Usando a função desta biblioteca setCookie (), ocorre o seguinte:

bolinho 1.A é gerado contendo um número único Este número é registrado em uma tabela de banco de dados, chamado ci_cookies juntamente com o netid / username passada para setCookie ()

função

2. Quando o verifyCookie () é chamado de hash de cookie do navegador deve coincidir com o hash gravada no banco de dados. Se isso acontecer, verifyCookie () retorna verdadeiro encaminhá-lo na home page

U precisa conf conjunto antes da sessão de carga

$do_not_remember = (boolean) $this->input->post('do_not_remember');
if ($do_not_remember) {
   $this->config->set_item('sess_expiration', 0);
   $this->config->set_item('sess_expire_on_close', true);
}
$this->load->library('session');
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top