Domanda

Come lo implementate in CodeIgniter?

È stato utile?

Soluzione

(Questa risposta era una risposta alla domanda originale)

  

Come faresti? O come farebbe   si crea una sessione con un più lungo   data di scadenza rispetto alle altre?

     

Tutte le sessioni create userebbero il   same $ config ['sess_expiration'] in   file di configurazione (impostazione predefinita: 7200 secondi),   c'è un modo per passare un valore personalizzato?   ?

L'estensione della scadenza di un cookie di sessione non funzionerà per un " ricordami " caratteristica, poiché l'utente perderà il cookie di sessione quando chiuderà il browser. Se Code Igniter non ha una funzione "Ricorda" nativa, allora dovrai scrivere qualcosa per eliminare un cookie di lunga durata che contiene informazioni che consentiranno un accesso automatico quando il server lo vedrà di nuovo.

C'è un buon articolo su Best Practice di cookie di accesso persistente , che può essere riassunto come:

  
      
  1. Quando l'utente accede correttamente selezionando Ricordami, un accesso   il cookie viene emesso in aggiunta al   cookie di gestione della sessione standard. 2
  2.   
  3. Il cookie di accesso contiene il nome utente dell'utente e un numero casuale   (il "token" da qui in poi) da a   spazio adeguatamente ampio. Il nome utente e   il token viene memorizzato come coppia in a   tabella del database.
  4.   
  5. Quando un utente non connesso visita il sito e presenta un cookie di accesso,   il nome utente e il token vengono cercati   nel database.        1. Se la coppia è presente, l'utente viene considerato autenticato.   Il token utilizzato viene rimosso da   Banca dati. Viene generato un nuovo token,   memorizzato nel database con il nome utente,   e rilasciato all'utente tramite un nuovo accesso   biscotto.        2. Se la coppia non è presente, il cookie di accesso viene ignorato.
  6.   
  7. Gli utenti che sono autenticati solo tramite questo meccanismo lo sono   non è consentito l'accesso ad alcuni   informazioni o funzioni protette   come cambiare una password, visualizzare   informazioni di identificazione personale, o   spendendo denaro. Per eseguire quelli   operazioni, l'utente deve prima   inviare correttamente un normale   modulo di login nome utente / password.
  8.   
  9. Poiché questo approccio consente all'utente di ricordarne più   accessi da diversi browser o   computer, è previsto un meccanismo   l'utente per cancellare tutto ricordato   accessi in un'unica operazione.
  10.   

Un altro articolo che aggiunge maggiore sicurezza a tali idee in Best Practice di cookie di accesso persistente migliorato

Se segui le pratiche in quegli articoli, non andrai molto male!

Altri suggerimenti

Potresti voler riconsiderare il suggerimento da "Best Practice di cookie di accesso persistente migliorato". Ho pubblicato la mia analisi del problema sul sito, ma l'essenza è questa:

  

Non puoi impedire il furto di cookie senza una linea sicura, qualunque cosa

(* Per "linea sicura", intendo tunneling SSL / VPN / crittografia a chiave pubblica - o un solido schema di risposta alla sfida *)

Sono tutto per le migliori pratiche di accesso persistenti, ma c'è un punto in cui nessuna quantità di inganno aiuterà e e il solo verso l'alto è SSL.

Grazie per la soluzione. L'ho implementato nel mio progetto CI.

DEV Nota: il cookie dovrebbe avere un hash sicuro come chiave di ricordo. - non solo memorizzare un ID utente) - non memorizzare una password, - e non memorizzare l'hash della password. In questo modo le persone non possono accedere automaticamente a nessun account.

Scenario peggiore: non appena un hacker scopre il metodo hash, è possibile regolare la funzione del produttore chiave in un unico punto e si è reimpostati con sicurezza. Vorrei solo regolare le stringhe di sale e pepe.

Spero che sia d'aiuto. Chris D. - dall'Australia :)

Per queste cose, le variabili CI in tutte le classi sono accessibili dalla propria libreria:

Ad esempio:

$this->session->sess_expiration = 500000;

Spero che risolva il tuo problema.

c'è una libreria su github per ricordati di scaricarlo.

Utilizzando la funzione setCookie () di questa libreria, si verifica quanto segue:

1. Viene generato un cookie contenente un numero univoco Questo numero è registrato in una tabella di database, chiamata ci_cookies insieme al netid / nome utente passato a setCookie ()

2.Quando viene chiamata la funzione confirmCookie (), l'hash del cookie del browser deve corrispondere all'hash registrato nel database. In tal caso, confirmCookie () restituisce true inoltra sulla home page

È necessario impostare conf prima di caricare la sessione

$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');
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top