2013-04-26 3 views
8

Sto lavorando a un sito per una piccola (leggi: < utenti) un'organizzazione non profit con cui lavoro e la mia conoscenza di PHP è piuttosto limitata. Attualmente ho uno script di accesso che ho trovato da un tutorial online. Il problema che sto incontrando è che ogni utente viene disconnesso dopo circa un'ora.Hai bisogno di aiuto per prolungare la durata della sessione di accesso PHP

La sicurezza non è un problema con il contenuto e idealmente vorrei che qualcuno rimanesse loggato per più giorni o settimane. Tuttavia, qualsiasi ricerca su Google sulla durata delle sessioni mi consente di individuare persone che cercano di abbreviare il timer di disconnessione.

Per quanto riguarda il codice va, una volta che la pagina di login confronta il nome utente e password per il database e segue con:

session_register("myusername"); 
session_register("mypassword"); 
header("location:index.php") 

E su ogni pagina protetta Si inizia con:

session_start(); 
if(!session_is_registered(myusername)){ 
header("location:login.html:); 
} 
+3

FYI, 'session_register' è deprecato –

+0

è meglio per voi resettare il timer di sessione una volta che l'utente ha un'attività. – Raptor

risposta

7

Modifica la tua .htaccess e inserire qualcosa come:

php_value session.gc_maxlifetime 2000 

2000 è in secondi. Imposta di conseguenza! Questo dirà al garbage collector della sessione di non distruggere la sessione per 2000 secondi. Inoltre, session_register è deprecato.

+1

Quindi posso semplicemente aggiungere quella riga a .htaccess e impostare il valore su 604800 per un accesso di una settimana? (60 x 60 24 x 7) Inoltre, come nota a margine: so che session_register è deprecato ma lo script che ho scaricato da Google lo usa e finora ha funzionato bene. Come faccio a cambiarlo per non usare session_register e mantenere la stessa funzionalità? –

+0

Sì, il 604800 funzionerà perfettamente. Invece di session_register usa $ _SESSION ['username'] = 'whatever' ;. – ChrisG

+0

Grazie mille per il vostro aiuto! –

4

Se si utilizza la gestione delle sessioni PHP cookie di default in base (che credo tu sia, dal momento che lei non ha citato nulla di cambiare il modo di default della sessione di lavori) è possibile utilizzare:

session_set_cookie_params(7200); // in seconds...session will last for 2 hours now 
session_start(); //once session cookie parameter is set, start the session.. 

session.gc* gruppo di valori ini sono utilizzati anche per questo scopo, ma ricorda che lo gc consiglia solo quando la sessione deve essere raccolta dati inutili, e in realtà non significa che accadrà in quel momento.

Si può leggere su cookie params here e garbage collection here

+0

Hai ragione nel presupporre che non ho cambiato nulla per quanto riguarda i cookie. La prima riga di codice che hai, presumo che vada anche su ogni pagina protetta? –

+0

sì, il modo migliore è metterlo in una sessione di includere il file e includerlo in ogni pagina in cui la sessione sarebbe attiva. – raidenace

+0

Se è incluso in ogni pagina, la sessione verrà reimpostata su 7200 ogni volta che si passa a una pagina diversa? In thory la sessione non sarebbe mai finita se continuassi a cambiare pagina –

6

dato la vostra domanda e la scala del vostro userbase, mi piacerebbe optare per un cambiamento un'impostazione globale, piuttosto che tentare di personalizzare le variabili di sessione; È semplice, fa quello che ti serve e richiede pochissimi sforzi per essere applicato a tutti gli utenti.

È possibile impostare la durata della sessione globale (come descritto in altre risposte) utilizzando un file di .htaccess:

php_value session.gc_maxlifetime 86400 //this is one day in seconds 

In alternativa, è anche possibile impostare nel file php.ini - un frammento di che è:

; After this number of seconds, stored data will be seen as 'garbage' and 
; cleaned up by the garbage collection process. 
session.gc_maxlifetime = 86400 

per niente, ma di riferimento pura, i valori avresti bisogno di prendere in considerazione a lungo termine garbage-collection:

86400 = one day 
604800 = one week 

Ulteriori informazioni sulla raccolta dei dati obsoleti (gc) here.