Sessions
-
Außerdem dachte ich bisher immer, dass man eigentl. nur seltenst seine IP behält sondern fast bei jeder Einwahl ins Internet 'ne neue zugewiesen bekommt. Ohne Cookies ist das ganz doch dann damit hinfällig oder hab ich das falsch verstanden?
MfGTobsen
-
Genau, wenn du dich neu einwähst bekommst du ne neue, aber wenn nen anderer user sich nachdem du dich abgemeldet hast einwählt, und die gleiche IP bekommt wird er nicht regestriert.
Und wenn der jenige cookies deaktiviert hat funzt das mit den cookies nicht. Wenn man diese nicht ausschalten könnte wäre es einfach, aber so.
-
Ich hatte auch gesagt, dass du dann auch noch die Zeit mitprotokollieren müsstest! Und dann z.B. sagen, dass ein Zugriff nur gezählt wird, wenn innerhalb der letzten Stunde kein Zugriff von der selben IP erfolgte.
Aber wie schon gesagt: ganz korrekt wird es nie! Entweder er zählt zu viel oder mal zu wenig.
Und einen so großen Aufwand für einen Zähler zu betreiben, nur damit er einigermaßen richtig zählt halte ich auch für etwas übertrieben! -> Am ehesten einfach mit Cookies (die nur währen der aktuellen Browsersitzung bestehen) lösen
-
gut, wie kann ich Ihm sagen, dass er die löschen soll, wenn er den browser schliesst? ich kann doch nur die zeit bestimmen, wie lange er den cookie behalten soll, oder net?
Ich habe es jetzt mal mit cookies versucht:
include "includes/db.php"; if(empty($_COOKIE['lastIP']) OR $_COOKIE['lastIP'] != $_SERVER['REMOTE_ADDR']) { $mysql = login("forum"); ---> setcookie("lastIP", $_SERVER['REMOTE_ADDR']); $sql = "UPDATE `Counter` SET `hits` = `hits` + 1"; mysql_query($sql) or die("Fehler beim Aktualisieren des Counters"); $sql = "SELECT `hits` FROM `Counter`"; $result = mysql_query($sql) or die("Fehler beim holen des Counters"); $row = mysql_fetch_row($result); logout($mysql); }
Und da gibt er mir ---> da nen Warning.
Warning: Cannot add header information - headers already sent by (output started at c:\apache\htdocs\holymetalercase\show.php:1) in c:\apache\htdocs\holymetalercase\navigation.php on line 8Wodran kann das liegen?
Darf ich wie bei den sessions nix vorher ausgeben, oder?[ Dieser Beitrag wurde am 20.03.2003 um 19:02 Uhr von HolyMetaler editiert. ]
-
Wieso, du kannst doch in jedem Script oben in der Session die aktuelle Zeit speichern. Zuvor testest du, ob die Zeitdifferenz zwischen letztem Zugriff und aktueller Zeit einen bestimmten Wert überschreitet, wenn ja löscht du die Session!
Du kannst natürlich auch direkt im Verzeichnis, wo die Dateien der Sessions liegen alle löschen, deren letzter Zugriff zu lange her ist
-
Ja, ok, das hab ich jetzt glaube ich geschecked.
Und was kann das bei der Warnung 2 antworten weiter oben sein?
-
Ja genau! Das liegt nämlich daran, dass die PHP-Session-Verwaltung normalerweise schon von sich aus ein Cookie mit der Session-ID setzt! Warum machst du das jetzt nochmal
-
Ja, aber ich starte überhaupt keine Session, sondern setzte einen cookie.
Es ist für nen Besuchercounter, ja, ich weiss für den anfang nen bissl kompliziert, aber ich will es halt mit drin haben.
-
Darf ich wie bei den sessions nix vorher ausgeben, oder?
Darauf bezog sich mein 'Ja genau!'. Du darfst bei Sessions eben genau aus diesem Grund (setzen eines Cookies) vorher nichts ausgeben
-
Das ist aber kagge, da ich es die einzelnen dateien, in einer show.php include, wo ich aber schon den <html><body> starte, und nicht bei jeder datei den counter überprüfen will.
-
dann mach eben für die Ausgabe des Zählerstandes eine 2. Datei und binde die bisherige oberhalb von <html> ein
-
ok, ich werde mal gucken, muss dann zwar einiges umstriken, aber es ist ja net viel.
-
Kann ich es nicht auch über include_once machen, oder gilt das immer nur für die eine Seite, und wenn die neu geladen wird, wird die trotzdem wieder includet?
-
Gilt imho nur für das jeweilige Script
-
Also das mit den Cookies würde ich lassen. Wie flenders das ja schon beschrieben hat, werden bei Sessions sowieso Cookies verwendet.
Und für die Leute, die keine Cookies erlauben, gibst Du dann die SessionID einfach per GET in der URL weiter. Wenn bei Deinem Webspace/PHP trans-sid aktiviert ist, dann wird die SessionID an jede URL automatisch angehängt. Das ist ab PHP 4.0.3. defaultmäßig aktiviert.Und dann kannst Du meiner Meinung fast die SessionID verwenden, um nen wiederholten Seitenzugriff bei der Zählung auszuschließen. Aber ich bin da nicht 100pro sicher, von was die SessionID abhängt.
Zu Deinem Headers-Sent-Prob:
Wenn Du Sessions verwendest, dann schreib ein der ersten Zeile am besten session_start(); - dann kann Dir zumindest da nix mehr zwischen kommen.MfGr,
mid
-
soweit so gut, nur ist ja das prob, dass ich dann ja ich dann ja immer wieder, wenn ich eine neue Seite anzeige, drauf zugreife, da fast alle seiten über eine zentrale show datei gehen.
[ Dieser Beitrag wurde am 20.03.2003 um 21:28 Uhr von HolyMetaler editiert. ]
-
in der Session kannst du dann ja speichern, ob du den Counter schon erhöht hast
-
stimmt.
Ich höre glaub ich erst mal auf und bau den overflow erst mal ab.
-
das ausgabe problem umgeht man meistens mit output buffering - das ist auch recht schön wenn einmal ein fehler auftritt - da dann eine eigens erstellte fehlerseite angezeigt werden kann.
ausserdem kann man dann gzip drüber laufen lassen und die ausgabe so komprimieren
bzw. später auch noch in andere formate umwandeln als html (zB als email verschicken oder in PDF umwandeln)
output buffering lohnt sich IMHO