web-dev-qa-db-de.com

So legen Sie die Dauer der Sitzung fest

Wie kann man die Lebensdauer der Session in PHP einstellen? Ich möchte es für immer festlegen, solange die Anforderung vorhanden ist. Die Anfrage ist AJAX. Mein PHP Code, der die Anforderung von AJAX behandelt, lautet: 

// AJAX.php
<?php    
session_start();

$_SESSION['counter'] = $_SESSION['counter'] + 1;

header('Content-type: application/json');    
echo json_encode(array('tick' => $_SESSION['counter']));
?>

und das JavaScript:

$(document).ready(function() {            
function check() {
    getJSON('ajax.php');        
}

function getJSON(url) {                                
    return $.getJSON(
                url,
                function(data) {
                    $("#ticker").html(data.tick);
                }
           );
}

setInterval(function() {
    check();
}, 10000); // Tick every 10 seconds

});

Die Sitzung wird immer nach 300 Sekunden zurückgesetzt.

24
brian

Die Sitzungen auf PHP arbeiten mit einer Cookie-Typ-Sitzung, während auf dem Server die Sitzungsinformationen ständig gelöscht werden.

Um die Zeit in php einzustellen, können Sie die Funktion session_set_cookie_params vor dem session_start verwenden: 

session_set_cookie_params(3600,"/");
session_start();

Zum Beispiel ist 3600 Sekunden eine Stunde, für 2 Stunden 3600 * 2 = 7200.

Es handelt sich jedoch um ein Session-Cookie. Der Browser kann es selbst ablaufen lassen. Wenn Sie längere Zeitsitzungen speichern möchten (z. B. Login merken), müssen Sie die Daten auf dem Server und ein Standard-Cookie auf der Clientseite speichern.

Sie können eine Tabelle "Sitzungen" haben:

  • session_id int
  • session_hash varchar (20)
  • session_data text

Wenn Sie ein Cookie validieren, speichern Sie die "Sitzungs-ID" und den "Hash" (aus Sicherheitsgründen) auf der Clientseite, und Sie können die Sitzungsdaten auf der Serverseite speichern, z.

Beim Login:

setcookie('sessid', $sessionid, 604800);      // One week or seven days
setcookie('sesshash', $sessionhash, 604800);  // One week or seven days
// And save the session data:
saveSessionData($sessionid, $sessionhash, serialize($_SESSION)); // saveSessionData is your function

Wenn der Benutzer zurückkehrt:

if (isset($_COOKIE['sessid'])) {
    if (valide_session($_COOKIE['sessid'], $_COOKIE['sesshash'])) {
        $_SESSION = unserialize(get_session_data($_COOKIE['sessid']));
    } else {
        // Dont validate the hash, possible session falsification
    }
}

Speichern Sie natürlich alle Session/Cookies-Aufrufe, bevor Sie Daten senden.

34
Exos

Stellen Sie folgende PHP-Parameter in Sekunden auf den gleichen Wert ein:

session.cookie_lifetime
session.gc_maxlifetime

in php.ini, .htaccess oder zum Beispiel mit 

ini_set('session.cookie_lifetime', 86400);
ini_set('session.gc_maxlifetime', 86400);

für einen Tag.

Links:

http://www.php.net/manual/de/session.configuration.php

http://www.php.net/manual/de/function.ini-set.php

14
scasei

Sitzungen können in Ihrer php.ini-Datei oder in Ihrer .htaccess-Datei konfiguriert werden. Sehen Sie sich die Sitzungsdokumentation PHP an.

Grundsätzlich möchten Sie nach der Zeile session.cookie_lifetime in php.ini suchen und den Wert 0 angeben, damit das Sitzungscookie gültig ist, bis der Browser geschlossen wird. Wenn Sie diese Datei nicht bearbeiten können, können Sie php_value session.cookie_lifetime 0 zu Ihrer .htaccess-Datei hinzufügen.

3

Da die meisten Sitzungen in einem COOKIE gespeichert sind (gemäß den obigen Kommentaren und Lösungen), ist es wichtig, sicherzustellen, dass das COOKIE als SICHER markiert ist (vorderes C #):

myHttpOnlyCookie.HttpOnly = true;

und/oder vie php.ini (Standard TRUE seit PHP 5.3):

session.cookie_httponly = True
0
matrixb51

Vor PHP 7 akzeptierte die session_start () - Funktion keine Konfigurationsoptionen direkt. Jetzt können Sie es so machen

<?php
// This sends a persistent cookie that lasts a day.
session_start([
    'cookie_lifetime' => 86400,
]);
?>

Referenz: http://nl1.php.net/manual/de/function.session-start.php#example-5976

0
Jose