php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 31.05.2005, 13:59  
Erfahrener Benutzer
 
Registriert seit: 08.02.2005
Beiträge: 224
lomtas
lomtas eine Nachricht über ICQ schicken
Standard session_id und ein besucherzähler

Hallo,

es geht um meinen Besucherzähler. Er ist voll auf meine Bedürftnisse zugeschnitte und daher der Beste den ich kenne

Aber ich habe ein Problem damit. Dafür muss ich kurz die Idee erklären, die dahintersteckt: Jeder Besucher, der die Seite betritt wird mit session_id, ipadresse, datum, browser und user_agent in einer datenbank gespeichert. Das würde natürlich bei jedem klick passieren, also prüfe ich bisher bei jedem klick, ob ein eintrag für heute mit einer entsprechenden session_id vorhanden ist oder nicht. wenn nicht, dann wird ein neuer eintrag erzeugt. wenn schon vorhanden, dann halt nicht. es wird halt auch noch geprüft, ob die browser identifikation und der referrer schon vorhanden sind. aber komplett lautet der code wie folgt:
PHP-Code:
<?php
$select
="select besucher_id from ".$table_besucher." where session_id='".session_id()."' and
         date_format(datumzeit,'%Y-%m-%d')='"
.date("Y-m-d")."'";
$anfrage=mysql_query($select);
if(
mysql_num_rows($anfrage)==0)
{
  
$select="select browser from ".$table_browser." where browser='".addslashes($_SERVER["HTTP_USER_AGENT"])."'";
  
$anfrage=mysql_query($select);
  if(
mysql_num_rows($anfrage)==0)
  {
    
$insert="insert into ".$table_browser."(browser) values('".addslashes($_SERVER["HTTP_USER_AGENT"])."')";
    
mysql_query($insert);
  }

  
$select="select browser_id from ".$table_browser." where browser='".addslashes($_SERVER["HTTP_USER_AGENT"])."'";

  
$browser=mysql_fetch_array(mysql_query($select));

  
$referer=getenv("HTTP_REFERER");
  
$teilreferer=explode("&PHPSESSID=",$referer);
  
$referer=$teilreferer[0];

  
$select="select referer from ".$table_referer." where referer='".addslashes($referer)."'";
  
$anfrage=mysql_query($select);

  if(
mysql_num_rows($anfrage)==0)
  {
    
$timestamp=time();
    
$insert="insert into ".$table_referer."(referer,firstvisit) values('".addslashes($referer)."','".$timestamp."')";
    
mysql_query($insert);
  }

  
$select="select referer_id from ".$table_referer." where referer='".$referer."'";

  
$referer=mysql_fetch_array(mysql_query($select));

  
$insert="insert into ".$table_besucher."(ip,session_id,browser_id,referer_id,datumzeit) values('".addslashes(getenv("REMOTE_ADDR"))."','".session_id()."','".addslashes($browser['browser_id'])."', '".addslashes($referer['referer_id'])."','".date("Y-m-d H:i:s")."')";
  
mysql_query($insert);
}
?>
Nun habe ich aber manchmal folgende konstrukte:
besucher_id / ip / browser_id / referer_id / session_id / datumzeit
# 16934 / 194.8.49.225 / 37 / 1 / af0cf4d9d91144eb6755ec52b50d8733 / 2005-05-31 12:39:27
# 16935 / 194.8.49.225 / 37 / 1 / d9717f700a62922e9097b755696b358d / 2005-05-31 12:39:28
# 16936 / 194.8.49.225 / 37 / 1 / 934e0c9272c03d332535695d0b43ea31 / 2005-05-31 12:39:29

drei einträge, die exakt die gleiche ip adresse haben - könnte bedeuten, dass es drei besucher aus dem gleichen netz wären, die dann halt auf die seite zugegriffen haben. interessant ist aber, dass die uhrzeit sich nur um sekunden unterscheidet und dass die es exact die gleiche browser identifiktation war.

nun stellt sich mir die frage: hat eine session_id irgendwann einen grund zu wechseln?? eigentlich bleibt eine session_id doch so lange erhalten, wie der user in diesem browserfenster die seite betrachtet. um diese einträge zu erzeugen, müsste ein besucher ja das fenster öffnen, schließen, öffnen, schließen und wieder öffnen. gibt es irgendwas über die session_id was ich noch nicht mitbekommen habe, oder ist mein ansatz komplett falsch??

vielleicht kann mir ja jemand weiterhelfen? vielen dank im voraus,
thomas
lomtas ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 31.05.2005, 14:37  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

da man in dem script weder den start der session nocht ob sie irgendwo beendet wird oder sowas sieht kann man dir da nix dazu sagen, man weis nicht ob du frames benutzt oder ähnlcihes ... haben deine sessions ein fallback für clients die cookies deaktiviert haben ?
robo47 ist offline  
Alt 31.05.2005, 14:51  
Erfahrener Benutzer
 
Registriert seit: 08.02.2005
Beiträge: 224
lomtas
lomtas eine Nachricht über ICQ schicken
Standard

also, das ganze ist ein CMS basiertes system was auf www.ichglaubs.de eingesetzt wird. der start der session ist natürlich ganz am anfang und die session wird nie von hand beendet, sondern immer erst durch den server nach der eingestellten zeit halt.

die session_id wird bei bedarf per parameter in der URL übergeben wenn kein cookie gesetzt werden konnte. so sieht es für mich jedenfalls momentan aus. ich habe das cms nicht programmiert.

konnten dir diese beschreibungen schon helfen?
lomtas ist offline  
Alt 01.06.2005, 07:20  
Erfahrener Benutzer
 
Registriert seit: 08.02.2005
Beiträge: 224
lomtas
lomtas eine Nachricht über ICQ schicken
Standard

Hat darauf wirklich keiner eine Antwort? Oder habe ich zu wenig Informationen weitergegeben?
lomtas ist offline  
Alt 01.06.2005, 10:04  
Benutzer
 
Registriert seit: 27.10.2004
Beiträge: 50
micbur
Standard

Hallo lomtas,

ich glaube, was robo47 meint ist das Problem von Cookie-Ignoranten wie mich zum Beispiel.
Stell' dir mal die Frage, wie dein Besuchszähler manipuliert wird, wenn ich auf deiner Seite surfe und keines deiner Cookies akzeptiere.
Was passiert in deinem Script? Wie viele Sessions werden geöffnet? Wenn ich mir 5 Seiten anschaue (5 Klick, 5 Seitenwechsel) um wie viel wird dein Besuchszähler erhöht?

Ciao, micbur
micbur ist offline  
Alt 01.06.2005, 11:04  
Erfahrener Benutzer
 
Registriert seit: 08.02.2005
Beiträge: 224
lomtas
lomtas eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von micbur
Hallo lomtas,
Wenn ich mir 5 Seiten anschaue (5 Klick, 5 Seitenwechsel) um wie viel wird dein Besuchszähler erhöht?
Um genau einen, denn die Seite merkt, ob du Cookies aktiviert hast oder nicht. Wenn sie nicht aktiviert sind, dann wird die Session_id per parameter (ichglaubs=) an die URL angehängt... Also ist auch da gewährleistet, dass die Session_id die gleiche bleibt...

Trotzdem habe ich dieses Problem...
lomtas ist offline  
Alt 01.06.2005, 11:49  
Gast
 
Beiträge: n/a
Standard

Zitat:
Trotzdem habe ich dieses Problem...
a. jeder Counter arbeitet ungenau: IP kann bei jedem Request wechseln (zB. AOL User) bzw. mehrere User arbeiten mit einer IP (lokale Netzwerke)
b. verzichte einfach drauf, weil das Ergebnis nur ungefähr und nie genau sein kann.
 
Alt 01.06.2005, 11:52  
Erfahrener Benutzer
 
Registriert seit: 08.02.2005
Beiträge: 224
lomtas
lomtas eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von meikel
a. jeder Counter arbeitet ungenau: IP kann bei jedem Request wechseln (zB. AOL User) bzw. mehrere User arbeiten mit einer IP (lokale Netzwerke)
b. verzichte einfach drauf, weil das Ergebnis nur ungefähr und nie genau sein kann.
Sorry, dass ich jetzt ein bisschen mecker, aber wenn du keine Ahnung hast, dann solltest du dich auch nicht einmischen. Es geht hier nicht um IPs sondern um Session_ids. Dass es Provider gibt, die IPs dynamisch verteilen dürfte allgemein bekannt sein. Und mir geht es nicht darum allen Leuten zu präsentieren, wie viele Besucher meine Seite besuchen, sondern intern ein Feedback zu bekommen. Die Besucherzählung erfolgt im Hintergrund und es können nur Leute mit logindaten darauf zugreifen.

Können wir jetzt zurück zum Problem kommen und ein bisschen qualifizierter in den Aussagen werden?

Und jetzt höre ich wieder auf rumzumeckern.
lomtas ist offline  
Alt 01.06.2005, 11:54  
Erfahrener Benutzer
 
Registriert seit: 01.12.2003
Beiträge: 4.113
supertramp
Standard

dann guck dir doch die logfiles an und werte die aus.
__________________
Aufstrebend, kompetent und werbefrei.
www.developers-guide.net
supertramp ist offline  
Alt 01.06.2005, 11:58  
Erfahrener Benutzer
 
Registriert seit: 08.02.2005
Beiträge: 224
lomtas
lomtas eine Nachricht über ICQ schicken
Standard

oaky, vergesst, dass ich gesagt habe, dass es ein besucherzähler ist und widmet euch dem problem. ich brauche keine vorschläge wie ich es anders machen kann, sondern wie ich MEINE Lösung dazu bekomme richtig zu funktionieren.

Wieso trägt er drei verschiedene Session_ids für ein und den gleichen User ein? Wie kommt das zustande?
lomtas ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php besucherzähler, besucherzähler php, php besucherzähler session, http://www.php.de/php-tipps-2005/23941-session_id-und-ein-besucherzaehler.html, besucherzähler php session, php besucherzaehler, session_id(), besucherzähler mit sessions, php http_user_agent ip, besucherzähler php sessions, php session besucherzähler, $_server[\'http_user_agent\'] mysql_query, php besuchszaehler session, session zugriffszähler php, $session id php zähler, php drei session_id, browser besucherzähler, php besucher zähler ip oder session, .addslashes(session_id()). php, php besucherzaehler ip browser zeit

Alle Zeitangaben in WEZ +2. Es ist jetzt 10:55 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.