Visualizzazione risultati 1 fino 10 di 10

Discussione: Sessioni e mysql

  1. #1
    Guest

    Predefinito Sessioni e mysql

    Salve a tutti,nel mio sito ho creato una piattaforma registrazione-login perfettamente funzionante.Dopo averla testata ho messo un blocco nel menù raffigurante gli utenti online,facendo si che quando un utente si loggasse fosse aggiuno alla tabella degli utenti online e che quando effettuasse il logout venisse cancellato dalla suddetta tabella.Da questa tabella ho fatto un select e l'ho messo in home.Non avevo però considerato una cosa.Dopo un pò la sessione termina...come faccio ad eliminare il record di un utente alla quale la sessione è scaduta?Grazie anticipatamente per le vostre risposte.

  2. #2
    Ospite Guest

    Predefinito

    Io metterei un campo in cui inserire il timestamp al momento del login.
    Poi fai un controllo per vedere se la differenza tra il timestamp attuale e quello del login è uguale a x secondi.
    Se è così elimini il record.
    Nel phpinfo sotto la direttiva session.gc_maxlifetime dovrebbe esserci scritto il numero di secondi dopo i quali una sessione scade.
    EDIT: Ho controllato, è 1440.
    Quindi puoi fare così:

    if((time()-$timestamp_login)>1440){
    // cancello il record
    }

  3. #3
    Guest

    Predefinito

    Il timestamp del login ce l'ho.
    Quindi facendo così una cosa del genere va bene?
    Codice PHP:
    <?php
    $query
    = "SELECT * FROM USERS where username=$_SESSION['username']");
    $row = mysql_fetch_array($query);
    $now = date("Y-m-d h:i:s");
    E per calcolare la differenza tra ora e timestamp(ultimo login),cheper esempio vorrei che se gosse due ore distruggesse la sessione come si fa?
    Edit: ho postato due secondi dopo l'edit tuo:D,ma se io uso il formato ora:minuto:secondo non posso fare la sottrazione no?
    Ultima modifica di phelpp : 25-08-2007 alle ore 18.06.24

  4. #4
    Guest

    Predefinito

    Non sono sicuro, ma la sessione dovrebbe scadere dopo x secondi di inattività, non dopo x secondi da quando è stata creata, quindi un altro modo per effettuare quello che chiedi, è scrivere un record ad ogni pagina che si visita, e cancellare tutti quelli presenti per quel nick, e poi controllare il timestamp con quello impostato nell'ultimo record...

  5. #5
    Guest

    Predefinito

    @jostock Sinceramente non ho capito bene quello che hai detto.Puoi spiegare meglio?Caso mai con qualche esempio

  6. #6
    Guest

    Predefinito

    per prima cosa crei una tabella di nome attivita, con i campi id, nick(o id nell'utente), timestamp

    poi in ogni pagina inserisci questo codice:

    Codice PHP:
    mysql_query("DELETE FROM attivita WHERE nick = '" . $nick . "'")
    mysql_query("INSERT INTO attivita (nick, timestamp) VALUES ('" . $nick . "', '" . timestamp() . "')");
    $timestamp = timestamp() - 900;
    mysql_query("DELETE FROM attivita WHERE timestamp < " . $timestamp);
    Questo codice esegue 3 query, la prima elimina tutte le attività dell'utente che sta visitando la pagina, poi crea una nuova attività per l'utente, ed infine cancella tutti i record più vecchi di 15 min (900 secondi) così non si vedono nel blocco

  7. #7
    Guest

    Predefinito

    grazie molte.Ma se l'utente è un visitatore e non è quindi loggato la query viene eseguita lo stesso.
    Quindi forse è meglio sostituire così,correggimi in caso contrario:
    Codice PHP:
    if(isset($_SESSION['username'])){ //e controllo se l'utente è loggato
    mysql_query("DELETE FROM attivita WHERE nick = '" . $nick . "'")
    mysql_query("INSERT INTO attivita (nick, timestamp) VALUES ('" . $nick . "', '" . timestamp() . "')");
    $timestamp = timestamp() - 900;
    mysql_query("DELETE FROM attivita WHERE timestamp < " . $timestamp);
    }else{
    exit();

  8. #8
    Ospite Guest

    Predefinito

    Togli quell'exit() dopo l'else, o l'esecuzione dello script verrà terminata se l'utente che visita la pagina è un visitatore (ovvero la variabile $_SESSION['username'] non è impostata).
    Anzi, togli proprio l'else, che in questo caso è inutile (e che tra l'altro manca della parentesi di chiusura ).

  9. #9
    Guest

    Predefinito

    E quindi così
    Codice PHP:
    if(isset($_SESSION['username'])){ //e controllo se l'utente è loggato
    mysql_query("DELETE FROM attivita WHERE nick = '" . $nick . "'")
    mysql_query("INSERT INTO attivita (nick, timestamp) VALUES ('" . $nick . "', '" . timestamp() . "')");
    $timestamp = timestamp() - 900;
    mysql_query("DELETE FROM attivita WHERE timestamp < " . $timestamp);
    }
    Dovrebbe fungere?

  10. #10
    Guest

    Predefinito

    Citazione Originalmente inviato da phelpp Visualizza messaggio
    E quindi così
    Codice PHP:
    if(isset($_SESSION['username'])){ //e controllo se l'utente è loggato
    mysql_query("DELETE FROM attivita WHERE nick = '" . $nick . "'")
    mysql_query("INSERT INTO attivita (nick, timestamp) VALUES ('" . $nick . "', '" . timestamp() . "')");
    $timestamp = timestamp() - 900;
    mysql_query("DELETE FROM attivita WHERE timestamp < " . $timestamp);
    }
    Dovrebbe fungere?
    in teoria si, in pratica lo devi provare

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •