2016-07-13 3 views
0

Ich versuche, eine Sitzungs-ID für den Benutzer erstellen, die 1 Stunde dauert.Erstellen einer Sitzung mit einer eindeutigen ID für 1 Stunde - PHP

Benutzeranmeldungen einmal - Randomid generiert - Sitzung hinzugefügt.

Benutzeranmeldung erneut innerhalb von 1 Stunde, die gleiche Sitzungs-ID gilt.

Wenn sich der Benutzer nach 1 Stunde anmeldet, generieren Sie eine neue ID.

Bisher habe ich diese

session_start(); 
//create random sid 
$today = date('YmdHi'); 
$startDate = date('YmdHi', strtotime('2012-03-14 09:06:00')); 
$range = $today - $startDate; 
$rand = rand(0, $range); 
$sid= ($startDate + $rand); 

//first time user 

if(isset($_SESSION['sessionid'])) { 

    $_SESSION['sessionid'] = $sid; 

} 
    //visiting user 
else 
    { 
     $_SESSION['sessionid'] = $_SESSION['sessionid']; 
    } 

echo $_SESSION['sessionid']; 

Wie kann ich ein Timeout für 1 Stunde hinzufügen? Ich habe Beispiele gesehen, in denen Cookies verwendet werden. Ich hoffe, nur serverseitige Sitzungen verwenden zu können?

Irgendwelche Ideen?

+1

Nur neugierig: Warum machst du das? -> '$ _SESSION ['sessionid'] = $ _SESSION ['sessionid']'. –

+0

Sie müssen etwas wie Benutzernamen und Passwort nehmen und speichern, dann prüfen, ob diese Kombination in einer Sitzung vorhanden ist und wenn dies der Fall ist, überprüfen Sie, ob die Sitzung "aktiv" ist ('if (($ startDate + 1 Stunde)> Datum) ('YmdHi')) {newSession} else {Sitzung ist offen!} ' –

+0

Schauen Sie hier, speziell bei' session_set_cookie_params() ', und der gewünschte Parameter ist' lifetime'. Http://php.net/manual/de /ref.session.php –

Antwort

2

Wenn eine zufällige ID an eine Sitzung angehängt werden soll, die nach einer Stunde aktualisiert wird, speichern Sie einfach die Zeit, die sie zuletzt mit der Sitzung generiert wurde.

Zum Beispiel:

session_start(); 

function regenerate() { 
    $_SESSION['code'] = uniqid(); 
    $_SESSION['code_time'] = time(); 
} 

if (empty($_SESSION['code']) || time() - $_SESSION['code_time'] > 3600) 
    //if there's no code, or the code has expired 
    regenerate(); 

echo "Your code is " . $_SESSION['code'] . " it was generated on " . date('m/d/Y h:i:s a', $_SESSION['code_time']); 
+1

Ändern Sie die '3600' in' 10', sehen Sie, dass sie nach 10 Sekunden aktualisiert wird. –

+0

Danke. Muss ich dies nur auf der ersten Einstiegsseite haben? übertrage diesen Wert auf eine zweite Seite (Benutzer auf 1. Seite klickt auf URL o f 2. Seite - die Sitzung muss gleich bleiben? –

+0

Sie müssten diesen Code auf jeder Seite, die den Code verwendet, "einschließen". Wenn der Benutzer also 'page1.php' besucht, dann besucht er' page2.php' nach einer Stunde und Sie möchten, dass der Code aktualisiert wird. Sie benötigen diesen Code sowohl auf page1 als auch page2. –

2

Wenn Sie die Sitzung wollen 600 Sekunden nach dem ersten Besuch abzulaufen:

<?php 
    $lifetime=600; 
    session_set_cookie_params($lifetime); 
    session_start(); 
?> 

Wenn Sie die Sitzung wollen 600 Sekunden nach dem Benutzer letzten Besuch ablaufen:

<?php 
    $lifetime=600; 
    session_start(); 
    setcookie(session_name(),session_id(),time()+$lifetime); 
?> 

Docs: http://php.net/manual/en/book.session.php

+0

FYI. Sie müssen sich nicht mit IDs anlegen. PHP verarbeitet all das für Sie im obigen Code. –

Verwandte Themen