2009-08-25 11 views
11

Utilizzo la funzione di accesso nel mio sito con sessione. Questa sessione viene espirata dopo alcuni minuti indipendentemente dal fatto che l'utente si sia disconnesso o meno. Ora quello che voglio è che la sessione dovrebbe essere scaduta solo quando un utente si disconnette.Se un utente non disconnette il suo account e poi torna dopo 2-3 giorni anche allora dovrebbe apparire loggato.non dovrebbe mai scadere da sola

ho trovato alcuni esempi in cui sono aumentati i tempi di scadenza di una sessione, ma voglio che scada solo sull'evento di disconnessione da parte dell'utente, indipendentemente dal tempo che ha impiegato per disconnettersi.

come posso farlo ??

Edit:

session_cache_expire(0); 
session_start(); 

è questo il modo di scrittura per farlo?

risposta

24

Una soluzione che viene spesso utilizzato, in questa situazione, è quello di:

  • avere una non troppo lunga durata della sessione: scadrà se l'utente non è attivo (che è solo il modo in cui funziona - e che è meglio per il vostro server se hai un sacco di utenti)
  • quando l'utente si collega, si imposta un cookie che contiene ciò che è necessario per lui di essere riconosciuto
  • se torna sul sito (con il cookie, e senza avere una sessione attiva), usi le informazioni contenute in quel cookie per autenticarlo, ricreando la sessione nello stesso momento.

questo modo:

  • non si dispone di migliaia di sessioni di "attivi" con nessuna buona ragione
  • si tengono le sessioni standard di modo di lavorare

e si ha la vantaggio di "non essere mai uscito fuori", almeno dal punto di vista dell'utente.

Si noti inoltre che con le sessioni "normali", il cookie contenente l'ID di sessione verrà eliminato quando l'utente chiude il browser, quindi verrà disconnesso, indipendentemente dalla durata della sessione.
Con la soluzione che propongo, tu sei colui che imposta per quanto tempo il cookie deve rimanere sul computer dell'utente ;-)


Significa, però, che quando un utente accede-out manualmente, avete per cancellare sia la sua sessione che il cookie, ovviamente - così non viene immediatamente re-auto-registrato.


Naturalmente, bisogna stare attenti a ciò che si imposta nel cookie: un cookie non è abbastanza sicuro, in modo da non memorizzare la password in esso, per esempio ;-)


In realtà, questo modo di fare le cose è come funziona spesso la funzione "ricordami"; eccetto, qui, i tuoi utenti non dovranno controllare una casella per attivare "ricordami" ;-)


Se non hai il tempo di sviluppare quel tipo di roba, un modo piuttosto veloce e sporco è per utilizzare una richiesta Ajax su tutte le tue pagine, che semplicemente "ping" una pagina PHP sul server - questo manterrà la sessione attiva (ma non è un buon modo di fare le cose: avrai ancora un sacco di sessioni sul server, avrai molte richieste inutili ... e funzionerà solo finché l'utente non chiude il browser).

+0

ho impostato un cookie con il nome utente e un numero casuale concatenato ad esso e poi l'ho immagazzinato nel database Quando viene chiamata una pagina, controllo il cookie di sistema e lo abbino a quello nel database se entrambe le corrispondenze visualizzano la persona che ha effettuato il login altrimenti no. E quando una persona si disconnette, imposto il cookie su null. È questa la strada giusta ??? ed è sicuro ??? – developer

+0

Sembra OK per me, almeno - non sarà mai "perfetta sicurezza", come chiunque usa il computer del ragazzo verrà registrato automaticamente, ma dovrebbe essere sufficiente, suppongo :-) –

+0

ya capisco la sicurezza problema. Bene grazie Martin :-) – developer

0

Rimuovete i cookie durante il test? I cookie sono abilitati? Dimentichi la sessione da qualche parte nel tuo codice?

Inoltre, vedere la mia risposta a un altro post: Quick question about sessions in PHP che spiega come rimanere connessi. Basta non eseguire un'attività cronjob/sheduled se si desidera che l'utente rimanga connesso per sempre.

2

Non è possibile farlo con la sola gestione della sessione interna di PHP. PHP invierà sempre l'id della sessione in un cookie di sessione che scadrà quando l'utente chiude il suo browser. Per ottenere una sorta di accesso automatico, è necessario un codice di accompagnamento che imposti un cookie più duraturo nel browser dell'utente e gestisca il riconoscimento di questi cookie e la mappatura tra il valore dei cookie e il rispettivo account utente.

Si prega di notare che questo influenza notevolmente i problemi di sicurezza, quindi dovrete occuparvi di molte cose. Si prega di leggere il seguente su come una possibile funzione di auto-login potrebbe essere al lavoro:

Problemi correlati