Ultima visita.

Buongiorno a tutti,

vorrei chiedervi un consiglio visto che col php sono agli albori.

Ho inserito nel mio codice una variabile superglobale:

$_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

Non vorrei utilizzare i cookies.


Vi posto il codice, magari noterete l'errore e tutto si risolverà in breve:

<?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))."<br>";
print "Ultimo accesso avvenuto il ".$_SESSION['started']."<br>";
?>

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.

Se invece aggiornassi con la query UPDATE nella pagina di logout questo si riporterebbe l'ultima sessione ma se l'utente chiudesse la sessione del browser non registreremmo il timestamp.

Purtroppo per me questo è lo scoglio più grosso da superare.

Grazie a chi saprà darmi consigli utili.

edit: se modificassi così il codice centrale utilizzando la varibile superglobale e riversando il tutto nell'ultimo accesso continua ancora ad aggiornarsi la data per via di quel update nella query, che non so dove porre.

$query = 'SELECT UltimoAccesso FROM Docente WHERE Login=\''.addslashes($_SESSION['login']).'\'';
$result = $__MYSQLI->query($query); 
if ($result->num_rows > 0) 
while( $row= $result->fetch_assoc() )
{
$_SESSION['started'] = $row['UltimoAccesso'];
echo 'dai ultimo accesso:'.$row['UltimoAccesso']."<br>";
};
$query = 'UPDATE Tesi.Docente SET UltimoAccesso= now()WHERE Login=\''.addslashes($_SESSION['login']).'\'';
$result = $__MYSQLI->query($query);

inviato 4 anni fa
foska28mm
modificato 4 anni fa
Meglio aggiungere il codice nel tipo di testo "Formattato" che rende il codice più leggibile.zeropingas 4 anni fa
X 0 X

Sarebbe buono utilizzare l'ultimo codice che hai inserito. Quel codice lo richiami in tutte le pagine del tuo sito? In quel caso la data verrebbe continuamente aggiornata, non dandoti i risultati che prevedi.

risposto 4 anni fa
zeropingas
X 0 X

Ho risolto mettendo questo codice nel login:

$query = 'SELECT UltimoAccesso FROM Docente WHERE Login=''.addslashes($_SESSION['login']).'''; 
$result = $__MYSQLI->query($query);  
if ($result->num_rows > 0)  
while( $row= $result->fetch_assoc() ) 

$_SESSION['started'] = $row['UltimoAccesso'];
echo 'dai ultimo accesso:'.$row['UltimoAccesso']."<br>";
};
$query = 'UPDATE Tesi.Docente SET UltimoAccesso= now()';
$result = $__MYSQLI->query($query);

mentre nella home, stampo solo:

echo 'dai ultimo accesso:'.$_SESSION['started']."<br>";

Grazie per la collaborazione e dei suggerimenti.

Buona giornata.

risposto 4 anni fa
foska28mm
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda