Session beenden bei Seitenausgang

Lektor21

Erfahrenes Mitglied
Hallo!

Ich hab ne Frage; gibt es eine Möglichkeit, wenn jemand einfach die Seite schließt, ohne sich auszulogen und damit seine Session nicht beendet die automatisch zu machen?

Also wenn er sich ausloggt beende ich mit:

PHP:
<?
@session_start();
session_destroy();
?>

Wie mache ich dass, dass die Session zerstört wird, wenn jemand die Seite unachtsam schließt? :confused:
 
Da stellt sich die Frage...woher willst du wissen, ob jemand die Seite schliesst?

Antwort: du kannst es nicht wissen...somit kann dein Vorhaben nicht gelingen.
 
Ich hab ne Frage; gibt es eine Möglichkeit, wenn jemand einfach die Seite schließt, ohne sich auszulogen und damit seine Session nicht beendet die automatisch zu machen?

Es gibt da aber eine andere Möglichkeit das zu Testen auch wenst nicht gleich beim Schliesen des Fenster greift.
Du kanst ein Time out festlegen nach dem die Session sich selbst zerstört.Also einfach die Zeitabstände prüfen. Wieviel Zeit dazwischen vergangen ist wo der letzte Klick des User statt gefunden hat. Ist dieser dann übers Zeitlimit kann man davon ausgehen das er das Browser Fenster geschlossen hat und die Session einfach löschen.

Mfg Splasch
 
Also vlt. kannst du mit JavaScript und
Code:
<body onunload="alert('Hier deine Funktion rein')"
was anfangen.Wenn man das Fenster schließt kommt hier nun ein Alert. du könntest da eine "Möchten Sie das Fenster Schließen" Meldung bringen und wenn ja dein PHP-Code ausführen, nämlich die Session zu Löschen.

grüße
crazy_cown
 
@Crazy_down:
diese Meldung kommt allerdings nicht nur, wenn man das Fenster schliesst, sondern auch, wenn man nur das Dokument verlässt, um bspw. eine andere Seite aufzurufen..das dürfte kaum erstrebenswert sein.
 
Hi Lektor21,

versuche es doch mal hiermit falls Dir eine MySQL Datenbank zur Verfügung steht:

Datenbanktabelle erstellen:
PHP:
CREATE TABLE `DEINE_TABELLE` (
  `sessionID` varchar(32) collate latin1_german2_ci NOT NULL,
  `usrID` bigint(20) NOT NULL,
  `variables` text collate latin1_german2_ci NOT NULL,
  `laccess` int(14) default NULL,
  PRIMARY KEY  (`sessionID`),
  KEY `usrID` (`usrID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci;

Sessionfunktionen (hier als Datei class.php deklariert):
PHP:
$db_host="localhost";
$db_user="Datenbank_user";
$db_pass_phrase="Dein_Passwort";
$database ="Deine_Datenbank";

function ms_open($sesspath, $sessname) {
     global $DB; // Datenbankhandle
     $time = time();
     $sessid = session_id();
     $query = "SELECT * FROM DEINE_TABELLE WHERE sessionID = '$sessid'";
     $RS = mysql_query($query, $DB);
     if (mysql_num_rows($RS) == 0) {
          $query = "INSERT INTO DEINE_TABELLE (sessionID, laccess) VALUES ('$sessid', '$time')";
          }
          else {
               $query = "UPDATE DEINE_TABELLE SET laccess = '$time' WHERE sessionID = '$sessid'";
               }
     $RS = mysql_query($query, $DB);
     return $RS;
     }

function ms_read($sessid) {
//Session aus der Datenbank lesen
     global $DB;
     $query = "SELECT * FROM DEINE_TABELLE WHERE sessionID = '$sessid'";
     $RS = mysql_query($query, $DB);
     $arrRS = mysql_fetch_assoc($RS);
     if (is_array($arrRS)) {
          return $arrRS[$variables];
          }
          else {
               return FALSE;
               }
}

function ms_write($sessid, $varis) {
//Session in die Datenbank schreiben
     global $DB;
     $query = "UPDATE DEINE_TABELLE SET variables = '$varis' WHERE sessionID = '$sessid'";
     $RS = mysql_query($query, $DB);
     return $blnRS;
}

function ms_destroy($sessid) {
//Session Destroy Funktion
     global $DB;
     $query = "DELETE FROM DEINE_TABELLE WHERE sessionID = '$sessid'";
     $RS = mysql_query($query, $DB);
     return $RS;
}

function ms_gc($sesslt) {
//Funktion des Garbecollectors, sprich aufräumen der Daten in bestimmten Abständen
     global $DB;
     $tStamp = time() - $sesslt;
     $query = "DELETE FROM DEINE_TABELLE WHERE laccess < '$tStamp'";
     $intRS = mysql_query($query, $DB);
     return $intRS;
}

function ms_close() {
//Wird hier im Beispiel nicht benötigt, kann aber bei Bedarf definiert werden!
}

Aufruf im Prorgamm:
PHP:
<?php
include("class.php");

     session_module_name("user");
     session_set_save_handler('ms_open', 'ms_close', 'ms_read', 'ms_write', 'ms_destroy', 'ms_gc');
     session_name('SESSION');
     $DB = mysql_connect($db_host, $db_user, $db_pass_phrase);
     mysql_select_db($database, $DB);

     session_start(); 

$sessid = session_id();
echo "Aktuelle Session-ID: $sessid";
?>

Jetzt ruf mal die Seite auf, schau Dir die Session an, schliesse die Seite und rufe Sie erneut auf - bei mir taucht dann eine neue Session-ID auf! ;-)

Der Vorteil dieser Methode ist auch, dass Variablen (z. B. aus einem LogIn Formular) in der Datenbank gespeichert werden können, bzw. bei Bedarf auch eine User-ID.


Beste Grüße,
preko
 
Zuletzt bearbeitet:
Zurück