Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
PHP - Controllare la fine della sessione
Forum - PHP - Controllare la fine della sessione

Avatar
matteoiamma (Member)
Pro


Messaggi: 74
Iscritto: 18/06/2008

Segnala al moderatore
Postato alle 20:57
Martedì, 24/03/2009
Ciao a tutti ragazzi,
è abbastanza complesso quello che sto per chiedere.

Sto sviluppando un cms e nel sistema di registrazione e gestione utenti utilizzo le sessioni($_SESSION['user']=blabla),
funzione session_start(); all'inizio e session_destroy(); nella pagina di logout.

Ho un problemino banale ma che devo risolvere.

Nella tabella degli utenti ho fatto un campo "Status" che al momento del login viene settato su "Online",
il problema è il seguente,
il campo status viene settato poi su offline solo quando l'utente clicca su Logout,
ma non quando ad esempio la sessione termina automaticamente

Come faccio a controllare il momento in cui termina la sessione???

Inoltre ho riscontrato altri strani problemi,
ad esempio ho notato una cosa molto strana,
quando termina la sessione anzichè sloggarsi accedo come un altro utente!!

Come posso risolvere entrambe le questioni???

Voglio specificare che utilizzo
Questo codice:
Codice sorgente - presumibilmente Plain Text

  1. ini_set('session.gc_maxlifetime','3600000');



Per stabilare la durata delle sessioni.In attesa di risposta.
Matteo.

Ultima modifica effettuata da matteoiamma il 24/03/2009 alle 20:57


Non dire intelligente solo a chi la pensa come te
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6112
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 19:40
Venerdì, 03/04/2009
Per fare il conteggio degli utenti online io userei un approccio diverso... intanto non c'è modo di sapere quando un utente si allontana dal sito in maniera perfetta (si può mettere una chiamata ajax sull'evento onclose, ma questo dovrebbe essere fatto su ogni pagina e caricherebbe eccessivamente il server, inoltre non è affidabile, quindi da scartare come ipotesi), l'unica maniera è fare una stima. Ad esempio quando un utente entra nel sito lo registro in un apposta tabella "utenti_online" in cui metto l'ip e l'ora in cui ho registrato l'accesso. Ovviamente se un IP esiste già modifico l'ora in modo che rispecchi l'ultima pagina caricata. Allo stesso tempo nello stesso codice che fa queste operazioni eseguo una query che cancelli tutti i record nella tabella la quale differenza tra ora attuale e data registrata è superiore ai 3 minuti (e qui puoi decidere tu in base al contenuto del tuo sito, se è ricco di articoli puoi elevarlo anche a 5-7 minuti per fare la stima più accurata). Dopodichè conto quanti records ci sono nella tabella... e voilà. Quello è il numero degli utenti online (stimati).


Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
PM Quote
Avatar
matteoiamma (Member)
Pro


Messaggi: 74
Iscritto: 18/06/2008

Segnala al moderatore
Postato alle 17:05
Mercoledì, 08/04/2009
Per quanto riguarda le sessioni ho risolto grazie per i consigli!


:k:


ecco come:



Codice sorgente - presumibilmente Php

  1. function session(){
  2. global $prefix;
  3. if ($_SESSION['status'] == "is_login"){
  4. $username=$_SESSION['username'];
  5. $sel_session = mysql_query("SELECT * FROM ".$prefix."_sessions WHERE username = '$username_session'");
  6.  
  7. while($sinfo=mysql_fetch_array($sel_session)){
  8. $lastpage_visit=$sinfo['lastpage'];
  9. }
  10.  
  11. $time_now = date("H:i:s");
  12.  
  13. if ($last_page_visit == $time_now){
  14.  
  15. } else {
  16. mysql_query("UPDATE ".$prefix."_sessions SET lastpage = '$time_now'");
  17. }
  18.  
  19. $time_total = $time_now - $lastpage_visit;
  20.  
  21. if ($time_total > mktime(0, 1, 0)) {
  22.  
  23. mysql_query("UPDATE ".$prefix."_users SET status = 'offline' WHERE username = '$username_session'");
  24.  
  25. }
  26.  
  27. }
  28. }



Non dire intelligente solo a chi la pensa come te
PM Quote