Logout

Aso, ja das ist mir klar^^ aber ich speichere den Wert nicht in einer Session, sondern in einer DB. Beim Logout, setzte ich den Wert halt auf offline und das soll halt auch beim schießen geschehen.
 
Beim Schießen? :D
Was ist denn aus den guten alten User-Online-Methoden geworden, bei denen einfach jeder Besucher einen eigenen Eintrag mit Session-, User-ID und Timestamp der letzten Aktivität in einer MySQL-Tabelle hatte? Da konnte man noch sauber bei jedem Scriptaufruf die "Leichen" (inaktiv seit z.B. mehr als 600 Sekunden) rauslöschen ... hach, die Welt verändert sich so schnell.
 
Beim Schießen? :D
Was ist denn aus den guten alten User-Online-Methoden geworden, bei denen einfach jeder Besucher einen eigenen Eintrag mit Session-, User-ID und Timestamp der letzten Aktivität in einer MySQL-Tabelle hatte? Da konnte man noch sauber bei jedem Scriptaufruf die "Leichen" (inaktiv seit z.B. mehr als 600 Sekunden) rauslöschen ... hach, die Welt verändert sich so schnell.

Genau das habe ich gleich als erstes geschrieben aber davon wollte ja keiner was wissen!?
 
Ja so habe ich es im mom aber ich finde diese Löschung nicht sehr schön. Ich möchte es lieber so haben wie alle anderen Seiten die ich kenne. Wenn man da den Browser schließt loggt er automatisch aus.
 
Woher kennst du den Code all dieser Seiten und weiß wie es da gelöst wird bzw. wenn du ihn kennst, dann arbeite mit ihm!

Wird der Browser geschlossen und dann erneut geöffnet, bekommst du auf jeden Fall eine neue Session-ID.
Wenn du diese in Verbindung mit dem Usernamen (den Zugangsdaten) vergleichst, dann merkst du auch ob der Browser geschlossen wurde oder nicht.
 
Also im mom habe ich das so:
Ich habe in der DB einen Wert für online. Ist der 1 ist man on, bei 0 off. Beim Logout setze ich den Wert halt auf 0 beim einloggen auf 1. Ich möchte jetzt aber nicht auf jeder Seite neu die DB aufrufen und die Zeit aktuallisieren um dann hinzugehn und zu schaun, ob jemand seit zb. 15 min inaktiv war. Wenn man mal kurz was essen geht, wäre man ja auch off und müsste sich neu anmelden. Ich bin hier auch schnell mal 1 std afk und möchte mich auch nicht immer neuanmelden müssen.
Deshalb suche ich eine gute Möglichkeit beim schließen des Browsers einen DB-Aufruf zu machen und den Wert auf 0 zu setzen.
 
Also schön ist es nicht aber es funktioniert:

PHP:
<?php
session_start();
$db = @mysql_connect("localhost", "root", "");
mysql_select_db("db1", $db);

if (isset($_GET["name"]) and isset($_GET["log"]) and $_GET["log"] == "1") {
	$sql = "INSERT INTO test (name, log, sid) VALUES ('" .$_GET["name"] ."', '" .$_GET["log"] ."', '" .session_id() ."')";
	$sql .= " ON DUPLICATE KEY UPDATE log = '1', sid = '" .session_id() ."'";
	mysql_query($sql);
} elseif (isset($_GET["name"]) and isset($_GET["log"]) and $_GET["log"] == "0") {
	$sql = "UPDATE test SET Log = '0' WHERE name = 'test'";
	mysql_query($sql);
}

$sql = "SELECT sid, log FROM test WHERE name = 'test'";
$result = mysql_query($sql);
if (mysql_num_rows($result) != 0 and session_id() == mysql_result($result, 0, "sid") and mysql_result($result, 0, "log") == 1) {
	echo "bereits eingeloggt<br />";
?>
	<a href="log.php?name=test&log=0">Logout</a>
<?php
} else {
?>
	<a href="log.php?name=test&log=1">Login</a>
<br />
<?php
}

?>

Felder in der Datenbank:

name: Der Name des Users
log: 0 = nicht angemeldet; 1 = angemeldet
sid: Session-ID mit der man angemeldet ist

Es wird immer der Benutzer "test" angemeldet oder eben auch ausgeloggt.
Wird die Seite aufgerufen wird geprüft ob er bereits eingeloggt ist oder nicht. Dazu wird der Status von "log" zusammen mit der aktuellen Session-ID verglichen.
 
Also im mom habe ich das so:
Ich habe in der DB einen Wert für online. Ist der 1 ist man on, bei 0 off. Beim Logout setze ich den Wert halt auf 0 beim einloggen auf 1. Ich möchte jetzt aber nicht auf jeder Seite neu die DB aufrufen und die Zeit aktuallisieren um dann hinzugehn und zu schaun, ob jemand seit zb. 15 min inaktiv war. Wenn man mal kurz was essen geht, wäre man ja auch off und müsste sich neu anmelden. Ich bin hier auch schnell mal 1 std afk und möchte mich auch nicht immer neuanmelden müssen.
Deshalb suche ich eine gute Möglichkeit beim schließen des Browsers einen DB-Aufruf zu machen und den Wert auf 0 zu setzen.

"Eingeloggt sein" und "online sein" sind zwei verschiedene Sachen. Wenn du nach 15 Minuten Inaktivität als offline gesetzt wirst, ist das doch nur der Status, den andere User zu sehen bekommen. Bei deinem nächsten Seitenaufruf wirst du automatisch wieder eingeloggt und als online gekennzeichnet.
 
@ tombe:
Warum sollte man die ssid mitspeichern? Reicht es nicht nur den Onlinestatus mit 1 oder 0 zu speichern? Wäre ja wieder ein Eintrag mehr in der DB.
@ erik s.:
Darüber habe ich ehrlich gesagt noch nie nachgedacht, aber jetzt wo dus sagst, ergibt das sinn für mich^^
 
Einigen wir uns doch mal darauf das du dir überlegst was du überhaupt haben/machen willst.

Zuerst willst du das jemand der sich zuvor angemeldet hat beim Verlassen der Seite ohne "manuellen Logout" automatisch ausgeloggt wird.

Dann denkst du darüber nach ob eriks Vorschlag nicht auch schon den gewünschten Zweck erfüllt.
 
Zurück