tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
669
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Lektor21 Lektor21 ist offline Mitglied Brokat
    Registriert seit
    Aug 2007
    Beiträge
    334
    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-Code:
    <?
    @session_start();
    session_destroy();
    ?>
    Wie mache ich dass, dass die Session zerstört wird, wenn jemand die Seite unachtsam schließt?
     

  2. #2
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    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.
     

  3. #3
    splasch splasch ist offline Mitglied Brillant
    Registriert seit
    Jul 2004
    Beiträge
    854
    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
     

  4. #4
    Avatar von Crazy_down
    Crazy_down Crazy_down ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Beiträge
    308
    Also vlt. kannst du mit JavaScript und
    Code :
    1
    
    <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
     
    »»» Ihre Pflicht ist statt zu klagen, Sterben zu ertragen «««

  5. #5
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    @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.
     

  6. #6
    Avatar von preko
    preko preko ist offline Mitglied Brokat
    Registriert seit
    Jun 2004
    Ort
    Mönchengladbach
    Beiträge
    397
    Hi Lektor21,

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

    Datenbanktabelle erstellen:
    PHP-Code:
    CREATE TABLE `DEINE_TABELLE` (
      `
    sessionIDvarchar(32collate latin1_german2_ci NOT NULL,
      `
    usrIDbigint(20NOT NULL,
      `
    variablestext collate latin1_german2_ci NOT NULL,
      `
    laccessint(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-Code:
    $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-Code:
    <?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
    Geändert von preko (21.09.07 um 11:50 Uhr)
     
    Wem das Wasser bis zum Hals steht, sollte den Kopf nicht hängen lassen.

    Was man heute Rap-Musik nennt, hieß früher Stottern und war heilbar...

    Es gibt zwei Wege im Leben - den schweren und den falschen!
    -----------------------------------------------------------------------------------------------------
    http://www.prenociste-mir.com
    -----------------------------------------------------------------------------------------------------

  7. #7
    Avatar von Crazy_down
    Crazy_down Crazy_down ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Beiträge
    308
    @Sven Mintel, ahh o.k. danke. das wusste ich nicht.

     
    »»» Ihre Pflicht ist statt zu klagen, Sterben zu ertragen «««

Ähnliche Themen

  1. Session automatisch beenden
    Von bauchinj im Forum Javascript & Ajax
    Antworten: 3
    Letzter Beitrag: 18.01.10, 13:16
  2. Session automatisch beenden
    Von flying-anzi im Forum PHP
    Antworten: 7
    Letzter Beitrag: 02.07.07, 18:39
  3. Beenden einer Session
    Von sHeN im Forum PHP
    Antworten: 2
    Letzter Beitrag: 08.02.05, 13:45
  4. Fremde Session beenden
    Von r3wDy im Forum .NET Archiv
    Antworten: 3
    Letzter Beitrag: 30.10.04, 08:47
  5. Session beenden
    Von wolfeye im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 1
    Letzter Beitrag: 08.09.04, 17:16