Session nach bestimmter Zeit beenden und in Datenbank schreiben

Hallo,

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.

MFG
Kyroy

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.

Allerdings danke für die schnelle antwort :slight_smile:

Du kannst die Session immer noch zerstören (ausloggen) und Daten in die Datenbank schreiben, wenn er nach mehr als 5 Minuten wieder kommt.

Ganz einfach. In die User-Tabelle ein Feld machen:
last_click integer not null

Da kommt der time(); rein. Wenn last_click < time() - 60*5, dann ausgeloggt.

Nein, weil es notwendig ist, dass er als ausgeloggt gild, sobald er 5 minuten nichts gemacht hat.

@Asterixus: Und wer führt das ganze aus. Hab an sowas schon gedacht, aber es muss halt immer wen geben, der es ausführt.

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 :slight_smile:

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 :smiley:

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 :smiley:

Danke für die Antworten

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 :slight_smile: Denn das klingt interessant

Nur ganz allgemein: Comet (programming) - Wikipedia, the free encyclopedia

xxx@xxxxxxxxxxxx:~# crontab -e 5,10,15,20,25,30,45,50,55 * * * * /kompletter_pfad/datei.php > /pfad/automatic_logout.log [PHP]<?php
mysql_connect(„xxxx“, „xxxx“, „xxxx“)
or die("Keine Verbindung möglich: " . mysql_error());
mysql_select_db(„xxxx“);

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?