Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1

    Di sessioni ed altre diavolerie

    Buongiorno a tutti,
    vorrei chiedervi un consiglio visto che col php sono agli albori.

    Ho inserito nel mio codice una variabile superglobale:

    Codice PHP:
    $_SESSION['started'] = date('d/m/Y H:i:s'); 
    la quale mi permette una volta logato di aggiornare la pagina o muovermi nelle pagine in costruzione ed avere sempre il riferimento al login appena eseguito senza che avvenga la modifica dell'ora.

    Vorrei però che tale sessione si riferisse al login precedente, magari avvenuto il giorno prima, comunicante esempio (dopo essermi logato stamani):
    codice:
    Ultimo accesso: 13/7/2012 22:04:33
    Ora ieri ho provato in mille modi e se ottengo il riferimento al login precedente aggiornando la pagina o muovendomi nel sito questo riferimento si perde, mentre se metto la variabile superglobale ho solo il riferimento all'ingresso appena avvenuto e non muta durante tutta la sessione (e questo mi va bene).

    Vorrei sapere se quel che chiedo contemporaneamente, cioè:
    - riferimento al login avvenuto precedentemente,
    - riferimento immutabile durante tutta la sessione
    sono cose fattibili direttamente utilizzando le sessioni; oppure se debba introdurre i cookie.

    Vi posto il codice, magari noterete l'errore e tutto si risolverà in breve:
    Codice PHP:
    <?php 
    date_default_timezone_set
    ('Europe/Rome');
    $query 'SELECT UltimoAccesso FROM Docente WHERE Login=\''.addslashes($_SESSION['login']).'\'';  
    $result $__MYSQLI->query($query);
    $ultacc '(n.a.)'
    if (
    $result->num_rows 0
    while( 
    $now$result->fetch_assoc() )

    $ultacc $now['UltimoAccesso'];} 
    $query 'UPDATE Tesi.Docente SET UltimoAccesso= now() WHERE Login=\''.addslashes($_SESSION['login']).'\'';
    $result $__MYSQLI->query($query); 

    print 
    "Ultimo accesso avvenuto il ".date('d-m-Y',strtotime($ultacc))." alle ore ".date('H:i:s',strtotime($ultacc))."
    "
    ;
    print 
    "Ultimo accesso avvenuto il ".$_SESSION['started']."
    "
    ;
    ?>
    il primo print riferisce al vecchio login ma mi si aggiorna appena navigo
    il secondo print mantiene il login ma però riferito alla sessione attuale e non alla precedente.
    La variabile $_SESSION['started'] è presente sia qui che in un'altra pagina quando il login viene effettuato.

    Purtroppo per me questo è lo scoglio più grosso da superare, risolto questo problema molte cose proseguiranno lisce... e vi lascerò un po' respirare

    Grazie a chi saprà darmi consigli utili.

  2. #2
    se ho ben capito, dovresti solo fare una query al login che ti pesca l'ultimo login effettuato, salvarlo in sessione e successivamente aggiornare l'ultimo login con un update.
    Quindi fino a quando resti dentro, hai la sessione memorizzata che fa riferimento al vecchio login, ma se esci e rientri la nuova sessione farà riferimento all'update che hai fatto poco prima e così via.
    http://codecanyon.net/category/all?ref=Manuelandro
    And I bet she told a million people that she'd stay in touch, Well all the little promises they dont mean much,When theres
    memories to be made

  3. #3
    Giusto hai compreso perfettamente, vorrei anche evitare di utilizzare i cookie.

  4. #4
    Buongiorno,
    ho risolto.

    Questa parte di codice risiede nella home, dopo aver effettuato il login:
    Codice PHP:
    <?php 
    date_default_timezone_set
    ('Europe/Rome');
    $query 'SELECT UltimoAccesso FROM Docente WHERE Login=\''.addslashes($_SESSION['login']).'\'';  
    $result $__MYSQLI->query($query);
    $ultacc '(n.a.)'
    if (
    $result->num_rows 0
    while( 
    $now$result->fetch_assoc() )

    $ultacc $now['UltimoAccesso'];} 


    print 
    "Ultimo accesso avvenuto il ".date('d-m-Y',strtotime($ultacc))." alle ore ".date('H:i:s',strtotime($ultacc))."
    "
    ;

    ?>
    Mentre quella relativa all'aggiornamento dell'ora è inserita quando un individuo si sconnette, e proprio prima di far cadere la connessione effettuo la quey:
    Codice PHP:
    if (isset($_SESSION['login']) && $_SESSION['isLoggedIn'] == 'true')
    {
    $query 'UPDATE Tesi.Docente SET UltimoAccesso= now() WHERE Login=\''.addslashes($_SESSION['login']).'\'';
    $result $__MYSQLI->query($query); 
      
    session_destroy();

    Per cui quando nuovamente mi logo ottengo la data e l'ora dell'ultima volta che ero collegato.

    Precedentemente erravo perché la query veniva effettuata nella home ed ogni aggiornamento della pagina ovviamente aggiornava anche la data risalente al precedente collegamento. La soluzione era più semplice di quello che credevo. Mi ero fuso a gestire variabili semplici e di sessione superglobali, invece la soluzione era ai piedi della candela, come al solito.

    Grazie a tutti

  5. #5
    la tua logica è errata, perché se io chiudo il browser anziché effettuare il logout, non ci sarà nessuna query update mentre la sessione resterà lì fino alla scadenza.
    http://codecanyon.net/category/all?ref=Manuelandro
    And I bet she told a million people that she'd stay in touch, Well all the little promises they dont mean much,When theres
    memories to be made

  6. #6
    Originariamente inviato da Manuelandro
    la tua logica è errata, perché se io chiudo il browser anziché effettuare il logout, non ci sarà nessuna query update mentre la sessione resterà lì fino alla scadenza.
    hai ragione... e quindi? cosa consiglieresti.

  7. #7
    Originariamente inviato da phpmydeath
    hai ragione... e quindi? cosa consiglieresti.
    te l'ho già scritto precedentemente.
    Tu hai un campo nel db chiamato ad esempio Ultimo_Accesso.
    Al momento del login, prendi il valore di questo campo e lo salvi in sessione (in modo da visualizzarlo e stamparlo dove vuoi finché l'utente naviga nell'area privata), mentre subito dopo lo aggiorni (il campo Ultimo_Accesso) alla data attuale.

    Quindi riassumendo:
    Se io sono entrato ieri ho aggiornato il l'ultimo accesso a ieri ma vedo, grazie alla sessione, come ultimo login l'altro ieri.
    Se entro oggi vedo ultimo login di ieri (ma intanto l'ho aggiornato ad oggi)..
    ...e via dicendo.
    http://codecanyon.net/category/all?ref=Manuelandro
    And I bet she told a million people that she'd stay in touch, Well all the little promises they dont mean much,When theres
    memories to be made

  8. #8
    Originariamente inviato da Manuelandro
    te l'ho già scritto precedentemente.
    Tu hai un campo nel db chiamato ad esempio Ultimo_Accesso.
    Al momento del login, prendi il valore di questo campo e lo salvi in sessione (in modo da visualizzarlo e stamparlo dove vuoi finché l'utente naviga nell'area privata), mentre subito dopo lo aggiorni (il campo Ultimo_Accesso) alla data attuale.

    Quindi riassumendo:
    Se io sono entrato ieri ho aggiornato il l'ultimo accesso a ieri ma vedo, grazie alla sessione, come ultimo login l'altro ieri.
    Se entro oggi vedo ultimo login di ieri (ma intanto l'ho aggiornato ad oggi)..
    ...e via dicendo.
    Ho capito il meccanismo...
    Nel login non posso fare la query dell'ultimo accesso altrimenti non riuscirei a trasportarla nella pagina della home dove dev'essere indicato.

    Avevo pensato al login di creare una variabile di sessione:
    Codice PHP:
    $_SESSION['started'] = date('Y-m-d H:i:s'); 
    per poi trasportarmela nella home.
    Solo che quando eseguo l'echo di questa variabile ottengo:
    codice:
    Ultimo accesso avvenuto il 01-01-1970 alle ore 01:00:00
    Perché questo, nonostante abbia messo timezone Roma.

    Uff...

  9. #9
    Originariamente inviato da phpmydeath
    Ho capito il meccanismo...
    Nel login non posso fare la query dell'ultimo accesso altrimenti non riuscirei a trasportarla nella pagina della home dove dev'essere indicato.
    no, se affermi questo allora non lo hai capito.

    ti faccio un esempio al volo

    Codice PHP:

    if($login) { //se ho effettuato il login correttamente

    $q mysql_query("SELECT Ultimo_Accesso From utenti WHERE utente = 'utente_che_vuoi'");
    $r mysql_fetch_array($q);

    //a questo punto hai nella variabile $r['Ultimo_Accesso'] il valore del vecchio login, ti trovi?

    $_SESSION['Vecchio_Accesso'] = $r['Ultimo_Accesso']; //ti sei salvato da un'altra parte questo dato

    mysql_query("UPDATE utenti SET Ultimo_Accesso = NOW() WHERE bla bla"); 
    //hai aggiornato l'ultimo accesso per LA PROSSIMA VOLTA

    //ora fino quando l'utente sta dentro gli potrai far vedere il vecchio accesso stampando la variabile di sessione

    più chiaro di così non so spiegartelo
    http://codecanyon.net/category/all?ref=Manuelandro
    And I bet she told a million people that she'd stay in touch, Well all the little promises they dont mean much,When theres
    memories to be made

  10. #10
    Ciao Manuelandro ti ringrazio del suggerimento ma ora non vorrei scazzarti e farti arrabbiare... purtroppo il codice che mi hai dettato e tradotto per la mia applicazione non funziona.
    Continua a darmi: Ultimo accesso avvenuto il 01-01-1970 alle ore 01:00:00

    Codice PHP:
    <html>
    <head>
    <title> Home </title>

    </head>

    <body>
    <?php
    if (isset($_SESSION['login']) && isset($_SESSION['isLoggedIn']) && isset($_SESSION['started']) == 'true')
    {
    ?>
    [url='index.php?page=logout']Esci[/url]
    <?php
    }
    ?>
    <div id='registrazione'>
        [url='index.php?page=registrazione']Registrazione[/url]
    </div>

    <?php 
    $query 
    'SELECT Login, Password FROM Docente WHERE Login=\''.addslashes($_REQUEST['login']).'\'';
      
    $result $__MYSQLI->query($query);
      
    $_SESSION['started'] = $r['UltimoAccesso'];
      
    //$r['UltimoAccesso']=$_SESSION['started'];
      
    $query 'UPDATE Tesi.Docente SET UltimoAccesso= now() WHERE Login=\''.addslashes($_SESSION['login']).'\''
      
    $result $__MYSQLI->query($query);
      print 
    "Ultimo accesso avvenuto il ".date('d-m-Y',strtotime($r))." alle ore ".date('H:i:s',strtotime($r));

    //print "Ultimo accesso avvenuto il ".date('d-m-Y',strtotime($ultacc))." alle ore ".date('H:i:s',strtotime($ultacc))."
    ";


    ?>
    è quella $_SESSION['started'] che di default è settata all' 01-01-1970 alle ore 01:00:00 appena viene creata e non vi è modo di schiodarla.

    Forse dovrei utilizzare la variabile time()?

    Mi sembra di non uscire più da questo vicolo cieco.

    Grazie.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.