2009-12-09 11 views
5

al momento sto usando la sessione per accedere all'utente. ma quando chiudo il browser e lo apro di nuovo devo accedere di nuovo. come si fa a far sì che l'utente che ha effettuato l'accesso dica 2 settimane.tieni l'utente connesso quando visita di nuovo la stessa pagina?

tramite i cookie?

+1

Chi può rispondere a questa domanda può anche prendere in considerazione i problemi di sicurezza relativi a questo argomento? Ad esempio, come impedire l'accesso automatico tramite la copia del cookie. Grazie. –

+0

Quindi, almeno menziona il rischio intrinseco di sicurezza dell'uso delle sessioni;) – Franz

+0

Dovresti riutilizzare un framework di autenticazione esistente quando possibile, perché, in realtà, è complesso. Ad esempio, dai un'occhiata a https://github.com/delight-im/PHP-Auth – caw

risposta

0

Sì. Utilizzi i cookie per implementare la funzionalità di "accesso automatico" (o "ricordami").

Questo google search o SO search results, dovrebbe indirizzarti verso la giusta direzione.

1

Leggi questo: http://www.php.net/manual/en/session.configuration.php

L'impostazione che vi serve è session.cookie_lifetime. I cookie di sessione (ad esempio quelli che non hanno una durata di vita) vengono cancellati quando il browser viene chiuso. Se vuoi che le sessioni rimangano attive più a lungo, imposta questa impostazione su php.ini, httpd.conf o .htaccess. Forse anche con ini_set

Edit: In realtà è possibile utilizzare questa funzione:

session_set_cookie_params (86400*30); 
session_start() 

86400 * 30 è di 30 giorni.

vedere qui: http://www.php.net/manual/en/function.session-set-cookie-params.php

9

Così si desidera un "Ricordami su questo computer"? Ecco un modo indipendente dal linguaggio come si può fare:

  1. Creare una tabella di DB con almeno cookie_id e user_id colonne. Se necessario, aggiungere anche cookie_ttl e ip_lock. I nomi delle colonne parlano da soli, suppongo.
  2. Al primo accesso (se necessario solo con l'opzione "Ricordami" selezionata), generare una chiave lunga, unica, difficile da indovinare che rappresenta lo cookie_id e memorizzarla nel DB insieme allo user_id. Inoltre, memorizzalo come valore del cookie di un cookie con un nome di cookie specificato prima. Per esempio. remember. Dai al cookie una lunga durata, ad es. un anno.
  3. Ad ogni richiesta, verificare se l'utente ha effettuato l'accesso. In caso contrario, controllare il valore del cookie cookie_id associato al nome del cookie remember. Se è presente ed è valido in base al DB, accedere automagicamente all'utente associato allo user_id e posticipare nuovamente l'età del cookie.

Per quanto riguarda i rischi per la sicurezza, se la chiave è lunga e sufficientemente mista (almeno 30 caratteri misti), le possibilità di forzare l'accesso brute sono trascurabili. Inoltre, probabilmente hai già capito a cosa serve la colonna opzionale ip_lock. Dovrebbe rappresentare l'indirizzo IP dell'utente. È possibile aggiungere una casella di controllo aggiuntiva "Blocca l'accesso a questo IP (solo se si dispone di un IP statico)" in modo che il server possa utilizzare l'indirizzo IP dell'utente come convalida aggiuntiva.

E se uno ha dirottato il valore del cookie da un utente senza un blocco IP? Bene, non c'è molto da fare contro questo. Convivici. La cosa del "ricordami di me" è divertente sotto ogni forum e account - i dirottatori non ci farebbero molto male, ma non lo userei certamente per i pannelli di amministrazione e quel tipo di pagine web che controllano le cose sul lato server.

Dopo tutto è abbastanza semplice. In bocca al lupo.

+0

Penso che sarebbe una buona idea archiviare gli utenti-agent in un database, perché è piuttosto illogico che lo stesso utente possa voglio essere ricordato sia in IE che in Firefox. In realtà, tutto ciò che può essere estratto dalla richiesta dovrebbe essere memorizzato al fine di impedire il furto di cookie, non è vero? .. –

+0

Doable, ma fallirebbe se l'utente aggiornasse l'UA. – BalusC

+0

Bene è molto meglio che l'utente inserisca nuovamente i suoi dettagli, piuttosto che un intruso per ottenere il suo accesso. –

Problemi correlati