it-swarm.com.de

PHP - Sitzung zerstören, nachdem der Browser geschlossen wurde

Obwohl diese Frage mehrere Duplikate hat, konnte ich keine passende Lösung für mich finden.

Ich habe ini_set('session.cookie_lifetime', 0); in meiner Konfigurationsdatei verwendet.

Aber es hilft mir nicht, die Sitzung beim Schließen des Browsers zu zerstören. 

Anwendungsstrom:

1) Generieren Sie auf der Authentifizierungsseite, wenn der Benutzer gültig ist, eine neue Sitzungskennung mit session_regenerate_id(true);.

2) Die Steuerung geht zu welcome.php, wo ich mit session_start(); eine neue Sitzung beginne.

3) Abmelden-Seitencode ist 

      $_SESSION = array();
      if (ini_get("session.use_cookies")) {
        $params = session_get_cookie_params();
        setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
      );
     }
    // Finally, destroy the session.
    session_destroy();
9
Shri

Das Beenden der Sitzung ist am besten, wenn nach einer bestimmten Zeit keine Antwort für diese Sitzung erfolgt. dann schließen Bitte lesen Sie diesen Beitrag und ich hoffe, dass das Problem behoben wird. " So ändern Sie das Sitzungszeitlimit in PHP? "

6
Ankit

Verwenden Sie einen Keep am Leben.

Beim Login:

session_start();
$_SESSION['last_action'] = time();

Alle paar Sekunden (zB 20 Sekunden) ein Ajax-Anruf:

windows.setInterval(keepAliveCall, 20000);

Serverseite keepalive.php:

session_start();
$_SESSION['last_action'] = time();

Bei jeder anderen Aktion:

session_start();
if ($_SESSION['last_action'] < time() - 30 /* be a little tolerant here */) {
  // destroy the session and quit
}
6
colburton

Es gibt verschiedene Möglichkeiten, dies zu tun, aber der Server kann nicht erkennen, wann der Browser geschlossen wird. Das Zerstören ist dann schwer.

  • timeout-Sitzung.

Erstellen Sie entweder eine neue Sitzung mit der aktuellen Uhrzeit oder fügen Sie der aktuellen Sitzung eine Zeitvariable hinzu. Überprüfen Sie es dann beim Start oder führen Sie eine Aktion aus, um zu sehen, ob die Sitzung entfernt werden muss.

session_start();
$_SESSION["timeout"] = time();
//if 100 seconds have passed since creating session delete it.
if(time() - $_SESSION["timeout"] > 100){ 
    unset($_SESSION["timeout"];
}
  • ajax

Lassen Sie Javascript einen Ajax-Aufruf ausführen, der die Sitzung löscht, mit onbeforeunload(), einer JavaScript-Funktion, die eine letzte Aktion aufruft, wenn der Benutzer die Seite verlässt. Aus irgendeinem Grund funktioniert das jedoch nicht immer.

  • löschen Sie es beim Start.

Wenn Sie möchten, dass der Benutzer nach dem Schließen der Seite die Anmeldeseite beim Start sieht, können Sie die Sitzung beim Start löschen.

<? php
session_start();
unset($_SESSION["session"]);

und wahrscheinlich gibt es noch mehr.

4
kpp

Das könnte dir helfen,

session_set_cookie_params(0);
session_start();

Ihr Session-Cookie wird zerstört ... Ihre Session ist also gut, bis der Browser geöffnet ist. Bitte sehen Sie http://www.php.net//manual/de/function.session-set-cookie-params.php dies kann Ihnen helfen.

2
Adil Abbasi

Es gibt noch einen weiteren "Hack" durch die Verwendung von HTTP Referer (wir nehmen an, dass das Browserfenster geschlossen wurde. Der aktuelle Domänenname des aktuellen Referers und der aktuelle Domänenname der aktuellen Seite stimmen nicht überein):

session_start();
$_SESSION['somevariable'] = 'somevalue';

if(parse_url($_SERVER["HTTP_REFERER"], PHP_URL_Host) != $_SERVER["SERVER_NAME"]){
    session_destroy();
}

Das hat auch einige Nachteile, aber es hat mir ein paar Mal geholfen.

1
DTT

Sie können dies mit JavaScript tun, indem Sie eine ajax-Anforderung an den Server auslösen, um die Sitzung bei einem vorläufigen Ereignis zu löschen, das ausgelöst wird, wenn die Registerkarte "Durchsuchen" oder das Fenster oder der Browser geschlossen wird.

1
itzmukeshy7

Verwenden Sie den folgenden Code, um die Sitzung zu zerstören: 

 <?php
    session_start();
    unset($_SESSION['sessionvariable']);
    header("Location:index.php");
    ?>
0
user3774008

Wenn Sie die Sitzungs-ID bei jeder Anmeldung ändern möchten, stellen Sie sicher, dass Sie session_regenerate_id (true) während des Anmeldevorgangs verwenden.

<?php
session_start();
session_regenerate_id(true);
?> 
0
Braike dp