PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : counter problem


Socrates
04.02.2007, 21:33:30
Hallo!
Ich habe ein einfaches counterscript geschrieben das so aussieht:

als erstes auf jeder seitemeiner hp:

<?php
session_set_cookie_params(10800);
session_start();
?>


code an der stelle, wo der counter stehen soll:

<?php
$datei = fopen("counter.txt","r+");
$counterstand = fgets($datei, 10);

if($counterstand == "")
{
$counterstand = 0;
}

if(!session_is_registered('counter_ip'))
{
$counterstand++;
rewind($datei);
fwrite($datei, $counterstand);
session_register('counter_ip');
}

echo $counterstand;
fclose($datei);
?>


Nun das script funktioniert prächtig aber nur wenn ich es alleine ausführe. denn wenn ich es in meine seite einbaue zählt es mehr benutzer als eigentlich die seite benutzen. das liegt daran, dass ich ein session-basierendes login-logout-system benutze, dass beim logout alle sessions löscht und man somit automatischnochmal gezählt wird da eben auch das counter session gelöscht wird. die sessions vernichte ich so:

session_start ();
session_unset ();
session_destroy ();

doch gibt es eine möglichkeit ein bestimmtes session z.b. $_SESSION['politik'] zu löschen?

dann hätte ich noch eine frage und zwar werden sessions ja auf dem server und nicht auf dem heimischen pc gespeichert oder? dann müsste es doch auch eine möglichkeit geben, eben das vorkommen eines speziellen sessions in diesem fall $_SESSION['counter_ip'] zu zählen, um festzustellen, wie viele leute online sind!?
Wäre für eure Hilfe echt dankbar!
MfG, Andy

Indyk
05.02.2007, 08:51:39
doch gibt es eine möglichkeit ein bestimmtes session z.b. $_SESSION['politik'] zu löschen?


unset($_SESSION['politik']);

BenniG.
05.02.2007, 09:42:57
um festzustellen, wie viele leute online sind!?
Das lässt sich nie zu 100% feststellen. Das HTTP-Protokoll ist dazu nicht in der Lage.
Du könntest ein datenbankbasiertes Session-Management machen, damit kannst du recht leicht schauen, wieviele Sessions offen sind. Im /tmp-Ordner rumzufummeln und die Session-Dateien anzuschauen wird dein Provider richtigerweise nicht erlauben.

Socrates
05.02.2007, 16:39:34
gut danke erstmal! aber es muss doch die einfache möglichkeit geben zu zählen, wie oft das session xy gesetzt ist! das würde das ganze sehr vereinfachen. so ähnlich wie bei einem array der count befehl!
mfg, Andy

meikel (†)
05.02.2007, 20:38:19
aber es muss doch die einfache möglichkeit geben zu zählen, wie oft das session xy gesetzt ist!
Einfach ist das nicht, wenn Du Dich durchs Session Temp wühlen willst. Je nach Provider liegen dort die Sessionfiles aller Kunden rum, falls Du dort überhaupt ran darfst.

das würde das ganze sehr vereinfachen. so ähnlich wie bei einem array der count befehl!
Wäre kein Problem, wenn Du Dir Deinen eigenen Session Handler auf SQL Basis schreiben würdest.

Socrates
05.02.2007, 22:03:50
hi again!
Ich habe eine möglichkeit gefunden mit der ich nachprüfen kann wie oft sessions im moment auf dem server gesetzt sind. das ganze sieht so aus:

sess_count($timestamp = 0, $anonymous = true)

Quelle: http://api.drupal.org/api/HEAD/function/sess_count
Problem, ich kann zwar schauen wieviele sessions in einem bestimmten zeitabstand gesetzt waren oder momentan gesetzt sind, aber ich kann nicht sagen, welches session überprüft werden soll. da ich aber insgesamt bis zu drei sessions setzen mochte ist das ein kleines problem. hat da jemand eine idee, einen, vorschlag oder auch eine alternative, denn wie ja bekannt ist, muss ich ohne db auskommen, da ich armer schüler bin! :-)
naja für tabak reichts! ;-)
MfG, Andy

rambi
05.02.2007, 23:25:05
http://www.php-faq.de/q/q-code-user-online.html
Du kannst jammern und flehen....
ES GEHT NICHT!!

Und wenn du keine DB zur Verfühgung hast, dann machs mit Dateien..
Aber bitte fummle, nicht zu diesem Zwecke, an dem PHP Sessionhandling rum..


da ich aber insgesamt bis zu drei sessions setzen mochte
Das verstehe ich nun gar nicht...

meikel (†)
06.02.2007, 05:47:59
hi again!
Ich habe eine möglichkeit gefunden mit der ich nachprüfen kann wie oft sessions im moment auf dem server gesetzt sind. das ganze sieht so aus:

sess_count($timestamp = 0, $anonymous = true)

Quelle: http://api.drupal.org/api/HEAD/function/sess_count
sess_count() ist keine PHP Funktion sondern das:
function sess_count($timestamp = 0, $anonymous = true) {
$query = $anonymous ? ' AND uid = 0' : ' AND uid > 0';
return db_result(db_query('SELECT COUNT(sid) AS count FROM {sessions} WHERE timestamp >= %d'. $query, $timestamp));
}
Das klappt also nur dann, wenn Du auch Drupal verwendest, welches offenbar ein MySQL basiertes Sessionhandling verwendet:
Drupal.org is the official website of Drupal, an open source content management platform.

Socrates
06.02.2007, 06:29:20
Du kannst jammern und flehen....
ES GEHT NICHT!!

Ok verstanden!

Und wenn du keine DB zur Verfühgung hast, dann machs mit Dateien..

Also mit Dateien...

Das verstehe ich nun gar nicht...
Ich benutze in mehreren scripten SESSIONS so sowohl für meinen counter als auch für mein login script.

sess_count() ist keine PHP Funktion..
Das klappt also nur dann, wenn Du auch Drupal verwendest, welches offenbar ein MySQL basiertes Sessionhandling verwendet:
Gut also neuer Ansatz! Danke trotzdem!
MfG, Andy

vonwegen
06.02.2007, 08:08:09
Ich benutze in mehreren scripten SESSIONS so sowohl für meinen counter als auch für mein login script.
warum?

ich hatte mir noch überlegt, dass es okay wäre wenn du auf einer domain verschiedene seiten hast und somit verschiedene sessions verwendest, aber für nur eine page?!

das kann man doch bestimmt kombinieren, womit das alles viel einfacher wäre...

bspw indem du in der session ne variable definierst, die sagt, welcher art die session ist bzw welcher arten...

grüße vonwegen