Sessions
-
Hi,
werden Sessions automatisch geschlossen, wenn der User die Siete verlässt, bzw. schliesst, oder nicht?Ich frage, weil ich bei meinem Counter nach meiner ertsen Überlegung über COOKIES gehen wollte, nur nicht jeder akzeptiert cookies, deswegen würde es ja nur noch halb funktionieren.
Wie würde es mit Sessions funktionieren?
-
Wofür willst du da Sessions oder willst du die Zugriffe pro Person zählen?
Du könntest z.B. einfach die IP-Adresse und Zeit mitprotokollieren um Mehrfachzählungen zu verringern - ganz verhindern ganz du sie aber imho nicht
-
Genau, dafür wollte ich ihn benutzen, aber wo soll ich die IP's speichern?
Ich hatte es mir bisher so gedacht, dass ich einfach nur inder einen Tabelle ein Feld mit den Hits habe, und diesen dann bei Bedarf, dass heisst, der User war mit der IP noch nicht auf der Seite, inkrementieren.Noch ne Frage:
Hat jede Seite seine eigene Session, oder hat der Browser eine grosse Session, ich gehe von ersterem aus, weiss es aber net, und deshalb frage ich.
-
Eine kleine weitere Frage hab ich noch, zwar nix zu sessions, aber ich stelle sie trotzdem ma:
Wie wird ein Return in einer textarea geschickt? '\n' oder wie, da ich zwar auf '\n' teste, aber er is mir nicht in <br> parsed, und miene smilies parsed er, deshalb.
-
Wenn du aus einer Textarea einen Text mir Leerzeichen abschickst, werden die \n natürlich mitgeschickt, sollte eigentlich funktionieren, sie in <br>s umzuwandeln, z.B. mit str_replace().
Nochmal nen guter Link zu Sessions: http://www.dclp-faq.de/ch/ch-version4_session.html
-
Du müsstest halt für jeden zugriff in einer Tabelle die IP loggen (DB)
Sessions werden auf dem Server verwaltet, d.h. sind solang gültig wie der User die Session-ID weiß und du die Session halt noch nicht für ungültig erklärt hast
Die Zeilenumbrüche kannst du wie schon gesagt mit str_replace ersetzen oder auch mit nl2br()[ Dieser Beitrag wurde am 19.03.2003 um 22:37 Uhr von flenders editiert. ]
-
Danke, werde dann mal die funk nl2br() ausprobieren, da ich das mit dem str_replace() schon mal ausprobiert hatte.
Das mit den IP's in der Tabelle loggen, wie meinst du das, da es ja eigentlich viel zu viel Speicher verbraucht, normalerweise braucht man ja nur eine smallint variable...
meinst du dann ne Tabelle so in der form:| IP | Hits |
Aber dann könnte ich doch nicht kontrolieen, welcher User die IP hatte. Wenn jetzt ein user eine IP hat, sich ausloggt, nen anderer loggt sich ein, und bekommt die gleiche IP, dann wird der ja nicht mitgezählt.
-
eher so
IP
und dann
mysql_query("select IP from iptable where IP='".ip."'"); if(!mysql_numrows()) { mysql_qeury("insert..."); counter++;
}wobei ich eher für ein textfile wäre - denn die verbindung zur db aufbauen kostet doch sinnlos viel zeit
[ Dieser Beitrag wurde am 20.03.2003 um 15:50 Uhr von Shade Of Mine editiert. ]
-
Ja, aber dann ist man ja nicht davor bewart, dass wenn 2 user mit der gleichen ip auf die seite gehen, dass dann beide gezählt werden.
-
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