Zur Navigation

Durchführung vor Schließung

1 Marcel (Gast)

Hallo

Mit einem Freund plane ich eine Community über Hunde. Diese ist soweit auch fertig und gibt genaue Auskunft darüber, wer zur Zeit online ist.
Der Online-Status (1 = online) wird beim Einloggen gesetzt. Wenn man sich durch die Logout-Datei (logout.php) ausloggt, wird automatisch online auf 0 (offline) gesetzt.
Nun allerdings habe ich das Problem, dass ich mit Sessions arbeite und somit beim Schließen ohne Abmeldung, dass Probleme habe, dass der Status auf online bleibt, obwohl man es nicht mehr ist.
Deshalb suche ich jetzt einen JavaScript-Code, welcher kurz vor dem Schließen des Fensters noch eine kurze Durchführung unternimmt (habe sowas schon mal gesehen, es aber leider nicht mehr gefunden).

Vielen Dank.

05.06.2006 14:24

2 Jörg Kruse

Meinst du sowas in der Art:

<script type="text/javascript">
function logout() {
 document.open(logout.php);
}
</script>

<body onunload="logout();">

05.06.2006 17:10 | geändert: 05.06.2006 17:10

3 Marcel (Gast)

Nein.
Wenn das Browser-Fenster geschlossen wird, dann soll es geschlossen, doch kurz vor dem Schließen noch ein kleiner Code ausgeführt werden.

05.06.2006 23:17

4 Jörg Kruse

Das Ausloggen geschieht aber auf dem Server - und der schickt doch eigentlich noch eine Antwort in Form einer HTML-Seite? Vielleicht kennt aber jemand anders noch eine solche Möglichkeit, vielleicht mit Ajax?

Vielleicht auch noch eine Alternative: Oft wird der Online-Status aus der letzen Aktivität errechnet. Z.B.: hat ein User in den letzten 3 Minuten eine Seite aufgerufen, ist er online. Der Vorteil hieran wäre, dass die User sich nicht bei jedem neuen Besuch neu einloggen müssten

06.06.2006 10:02

5 Marcel (Gast)

Danke für deine schnellen Antworten!

Wie gesagt, wenn man sich ausloggt (also die logout.php-Datei aufruft), dann wird man ausgeloggt (Sessions gelöscht) und der Status "online" in der Datenbank editiert und auf 0 (offline) gesetzt.
Das Problem hierbei ist nun, dass der Status nur dann auf 0 gesetzt wird, wenn man sich auch wirklich ausloggt und nicht, wenn man nur das Browser-Fenster schließt.

Damals hatte ich sowas in Form eines Fensters gesehen. Wurde die Seite geschlossen, hat sich eine weitere Seite mit einer Nachricht geöffnet. Soweit ich mich erinnern kann, wurde dies mit JavaScript realisiert.

Gegen deine Variante hätte ich allerdings auch nichts einzusetzen. wWe kann man denn kontrollieren, ob der User in den letzten drei Minuten aktiv war oder nicht? Müsste ich bei jeder "Bewegung" eine neue aktuelle Uhrzeit in die Datenbank schreiben?

06.06.2006 10:40

6 Jörg Kruse

Damals hatte ich sowas in Form eines Fensters gesehen. Wurde die Seite geschlossen, hat sich eine weitere Seite mit einer Nachricht geöffnet.

Das wäre dann der Code, den ich oben aufgeführt habe, nur mit window.open statt document.open und logout.php köntest du entsprechend umbauen, dass es diese Meldung ausgibt? Ich weiß allerdings nicht, ob solch ein Fenster nicht durch Popup-Blocker geblockt wird

wWe kann man denn kontrollieren, ob der User in den letzten drei Minuten aktiv war oder nicht? Müsste ich bei jeder "Bewegung" eine neue aktuelle Uhrzeit in die Datenbank schreiben?

Ja, bei jedem Aufruf einen Lastvisite-Timestamp setzen. Dann alle User aus der Datenbank holen, deren Timestamp größer ist als ein definierter Zeitpunkt, also in etwa so:

$onlinebeginn = time() - (3 * 60);
$query = "SELECT id, name FROM user WHERE lastvisit > $onlinebeginn";

06.06.2006 11:12

7 Marcel (Gast)

bei jedem Aufruf einen Lastvisite-Timestamp setzen

Damit meinst du jetzt jede Seite im Memberbereich, oder?
D.h. ich müsste bei jedem User alle paar Minuten den "Lastvisit"-Datensatz ändern?

10.06.2006 21:49

8 Jörg Kruse

Du musst den Timestamp so oft updaten, das er dir aussagekräftig genug ist

11.06.2006 23:01

9 Nugat (Gast)

Hallo, ich hab haargenau das selbe problem!!
das mit dem timestamp und Überprüfung der Datenbank habe ich schon realisiert! nur ist mir das zu ungenau!!
ich habe es mit body onunload="logout()" probiert, nur ist das problem, das bei jedem get oder post die funktion logout() ausgeführt wird! also gibt es irgendetwas in javascript womit ich in logout() überprüfen kann, ob das parentwindow noch auf ist oder schon geschlossen!!

Ich sitz schon 4 Stunden vor diesem Problem, das ist der erste Beitrag in einem Forum, wo dieses Problem schon
Ich hoffe mir kann hier jemand helfen!

Schonmal Danke für die Hilfe im vorraus!!

mfg,
nugat

nugat1@gmail.com

29.06.2006 22:19

10 Jörg Kruse

das mit dem timestamp und Überprüfung der Datenbank habe ich schon realisiert! nur ist mir das zu ungenau!!

Die JavaScript-Lösung ist auch ungenau in den Fällen, in denen JavaScript deaktiviert ist

also gibt es irgendetwas in javascript womit ich in logout() überprüfen kann, ob das parentwindow noch auf ist oder schon geschlossen!!

parent bezieht sich auf ein Frameset, opener auf das öffnende Fenster - probier es mal mit dieser if-Klausel im Popup-Window:

if (window.opener.closed)

29.06.2006 22:36 | geändert: 29.06.2006 22:38