Fabian St.: PHP startet die Session immer neu

Beitrag lesen

Hi!

ich habe einen Counter programmiert (greift auf eine MYSQL Datenbank zu, funktioniert auch alles super) und der soll jetzt nur dann Zählen, wenn ein User auf die HP kommt, der seit min. 3 Stunden nichtmehr da war.
Habe ein Tutorial gefunden wo stand, ich sollte das ganze per Session lösen. Die Session soll dann halt 3 Stunden aktiv bleiben und solange es die Session gibt, wird der Counter nicht erhöht. Sinngemäßer Quelltext:

Grundsätzlich ist dies eine mögliche Lösung, aber du solltest dir bewusst sein, dass es für dein Vorhaben keine wirklich «sichere» Lösung gibt, d.h. man kann es immer umgehen und damit die Ergebnisse fälschen. Verlasse dich lieber auf die Server-Logs - diese sind wesentlich aussagekräftiger.

[...]
So, wenn ihr jetzt die Seite aufruft http://www.lutzfechner.de/rf_php und mal auf Aktualisiernen klickt werden ihr sehen, dass der Counter munter hochzählt und die Session-ID immer unterschiedlich ist, also immer eine neue gestartet wird, woran kann das liegen?

Dein Code scheint soweit in Ordnung zu sein. Trotzdem solltest du am Beginn deines Skriptes die Zeile error_reporting(E_ALL); einfügen, um wirklich _alle_ Fehler angezeigt zu bekommen.

Das Problem bei der obigen Seite liegt daran, dass offenbar kein Session-Cookie gesendet wird, welches jedoch für dein Vorhaben notwendig ist, da sonst z.B. bei einem Aufruf von http://www.lutzfechner.de/rf_php/index.php nicht erkannt wird, dass bereits  eine Session existiert. Dies bestätigt auch folgender Test:

1.) Rufe http://www.lutzfechner.de/rf_php/index.php in deinem Browser auf
2.) Kopiere dir die angezeigte Session-ID
3.) Rufe http://www.lutzfechner.de/rf_php/index.php?PHPSESSID=<vorherige Session-ID> auf und du wirst sehen, dass weitere Requests nicht zu einer Inkrementierung der User-Anzahl führen.

Aus diesem Grund solltest du die Einstellungen zu «session.use_trans_sid», «session.use_cookies» und eventuell auch «session.use_only_cookies» überprüfen.

Ferner könntest du das ganze auch allein über Cookies realisieren, was IMHO sogar sinnvoller wäre. Solltest du dich hierzu entscheiden, ist setcookie() für dich ganz interessant.

Grüße,
Fabian St.