2009-03-07 4 views

Répondre

2

Je pense qu'il y a deux options ni l'un ni l'autre sont excellentes mais elles sont ici.

1) Si vous avez accès au système de fichiers, vous pouvez vérifier l'horodatage de création sur le fichier de session.

2) Mémoriser l'heure de création dans la session, par ex.

session_start(); 
if(! isset($_SESSION['generated'])) { 
    $_SESSION['generated'] = time(); 
} 
+0

Votre exemple remplacerait la valeur de chaque requête. – Gumbo

+0

Vous avez raison, je ne faisais que démontrer l'idée et non l'implémentation. –

2

Vous pouvez simplement stocker l'horodatage sur lequel la session a été créée lors de la session

6

Vous pouvez enregistrer le moment où la session a été initialisé et retourner cette valeur:

session_start(); 
if (!isset($_SESSION['CREATED'])) { 
    $_SESSION['CREATED'] = time(); 
} 

Et pour récupérer ce informations d'une session arbitraire:

function getSessionLifetime($sid) 
{ 
    $oldSid = session_id(); 
    if ($oldSid) { 
     session_write_close(); 
    } 
    session_id($sid); 
    session_start(); 
    if (!isset($_SESSION['CREATED'])) { 
     return false; 
    } 
    $created = $_SESSION['CREATED']; 
    session_write_close(); 
    if ($oldSid) { 
     session_id($oldSid); 
     session_start(); 
    } 
    return time() - $created; 
} 
+0

Votre code me sent, parce que vous ne retournez pas la durée de vie de la session! Vous venez de retourner l'heure à laquelle il a été créé, mais le nom de la méthode est getSessionLifetime(). Votre méthode doit s'appeler getSessionStartTime() à la place ou modifier la méthode pour calculer le temps écoulé réel. – RibaldEddie

+0

Vous avez raison, merci. – Gumbo

+0

Aussi, ne vous embêtez pas à retourner faux. SI vous allez calculer la durée de vie de la session, renvoyez zéro, car la session a été active pour des unités de temps zéro. SI vous voulez que la session commence et que la session soit nouvelle, alors vous voudrez retourner time(). – RibaldEddie

Questions connexes