ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
669
669
EMPFEHLEN
-
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:
Wie mache ich dass, dass die Session zerstört wird, wenn jemand die Seite unachtsam schließt?PHP-Code:<?
@session_start();
session_destroy();
?>
-
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.
-
Es gibt da aber eine andere Möglichkeit das zu Testen auch wenst nicht gleich beim Schliesen des Fenster greift.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?
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
-
21.09.07 10:57 #4
Also vlt. kannst du mit JavaScript und
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.Code :1
<body onunload="alert('Hier deine Funktion rein')"
grüße
crazy_cown»»» Ihre Pflicht ist statt zu klagen, Sterben zu ertragen «««
-
@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:
Sessionfunktionen (hier als Datei class.php deklariert):PHP-Code: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;
Aufruf im Prorgamm: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!
}
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!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";
?>
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,
prekoGeä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
-----------------------------------------------------------------------------------------------------
-
21.09.07 11:57 #7
@Sven Mintel, ahh o.k. danke. das wusste ich nicht.
»»» Ihre Pflicht ist statt zu klagen, Sterben zu ertragen «««
Ähnliche Themen
-
Session automatisch beenden
Von bauchinj im Forum Javascript & AjaxAntworten: 3Letzter Beitrag: 18.01.10, 13:16 -
Session automatisch beenden
Von flying-anzi im Forum PHPAntworten: 7Letzter Beitrag: 02.07.07, 18:39 -
Beenden einer Session
Von sHeN im Forum PHPAntworten: 2Letzter Beitrag: 08.02.05, 13:45 -
Fremde Session beenden
Von r3wDy im Forum .NET ArchivAntworten: 3Letzter Beitrag: 30.10.04, 08:47 -
Session beenden
Von wolfeye im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 1Letzter Beitrag: 08.09.04, 17:16





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren