ich habe ein Problem und zwar haben ich eine Seite mit Sessions, wo es unbedingt notwendig ist, dass User nach einer bestimmten Zeit ohne Aktion getrennt werden. Jedoch nicht nur Client -Seitig, sondern es soll auch in die Datenbank eingetragen werden.
eingeloggt = 0
Ich weiss net, ob das in der Frage schon enthalten ist, aber ich möchte zusätzlich wissen, wie ich ein script schreiben kann, dass sich quasi dauerhaft ausführt zum beispiel zufällig etwas geschehen lässt.
PHP-Scripte haben i.d.R. eine Lebensdauer von einem HTTP-Request. Du brauchst also entweder ein Programm, dass permanent im Hintergrund läuft, oder du rufst ein Script nach X-Stunden/-Tagen etc. mittels cronjob auf.
edit man kann Session auch einfach gleich in eine Datenbank speichern: http://www.php.net/manual/de/function.session-set-save-handler.php
Wie lange Session auf der Platte überleben, kann man auch einfach über die php.ini einstellen.
Das löst dein Problem eleganter.
Falls ich net was übersehen habe, löst es mein Problem noch nicht 100%ig. Es ist unbedingt notwendig, dass man schon als ausgeloggt gild, wenn man z.b. 5 Minuten nichts gemacht hat. Auch ohne, dass der User versucht wieder zu verbinden.
Weiss nicht wie Serverlastig das ist, aber bei jedem Seitenaufruf einer Person, wird eine Prüfroutine durchgeführt. Und diese Setzt dann die leute, die länger als 5 min nichts gemacht haben als offline. Dafür muss aber gegeben sein, das bei jeder Aktion einer Person der timestamp der Person erneuert wird. Und es reicht doch wenn die prüfung durch einen Seitenaufruf gestartet wird, da man sich die online/Offline Seite ja auch angucken muss
und zu deinem Script was sich dauerhaft ausführt. Auch wenn der User nicht aktiv ist?
Dann müsstest du einen Cronjob starten, der zum Beispiel alle 5 min eine Aktionsseite aufruft.
Jo so ähnlich hatte ich es auch gedacht. Ich hoffe das mit jeder aktion zu aktualisieren wird nicht zu krass für die datenbank werden. Und muss es wahrscheinlich per cronjob machen. Muss ich mir halt ma anscheune und reinlesen, ausser es hat wer nen tutorial
edit:
*/5 * * * * /scriptpfad/script.php
so müsste das doch sein, oder? ^^
Der Grund ist einfach, dass es eine are Browsergame wird. Wenn man da so anch 5-10 Minuten ausgeloggt wird, wenn man sich net ausloggt passt das. Ist der User dann halt quasi selber schuld
Wie du gemerkt hast, ist HTTP für solche Aufgaben nicht ausgelegt. In HTML5 gibt’s Methoden für Server-Push, sowie (das im anderen Thread vorgestellte) Comet.
Leider habe ich soclhe Sachen auch bisher immer über HTTP geregelt was wie gesagt nicht dafür ausgelegt ist. Hast du den ne schöne Seite oder einen Suchbegriff für die Server Push Comet Geschichte?
Wäre sehr dankbar Denn das klingt interessant
mysql_query("
UPDATE `characters` SET `loggedin` = '0' WHERE DATE_SUB(NOW(),INTERVAL 15 MINUTE) >= `last_moved`
")or die("Fehler: " . mysql_error());;
?>[/PHP]Die php-datei funktioniert einwandfrei, aber er führt sie nicht aus und es gibt eine leere .log datei
hab grade ma der log datei 777 gegeben, nix neues…immer noch leer
Zeit hat der root auch:xxx@xxxx:~# date
Fri Jun 18 17:20:02 CEST 2010
edit: kann ich mit dem cronjob eigentlich auch die sessions der user zerstören?