Javascript includieren und Werte an PHP übergeben


OrderMax

Grünschnabel
#1
Ich bin mit JavaScript leider etwas auf Kriegsfuß. Deshalb will ich die Daten mit PHP weiter verarbeiten.
Ich will mir ein einfaches Counter/Statistik Script programmieren. Aber es funktioniert leider nur sporadisch und ich weiß nicht an was es liegt. Auf der einen Domain funktioniert es, auf der anderen wieder nicht.

Ich füge mein Script im footer ein:
Javascript:
<script src="http://meinedomain.net/counter/ct.js"></script>

Das ist die ct.js Datei. Hier frage ich paar Werte ab und gebe sie an ct.php weiter
Javascript:
var reff = document.referrer;
var page = document.location;
var browser = navigator.appCodeName;
var browser_lang = navigator.language;
var system = navigator.platform;
var aufloesung = screen.height + "x" + screen.width;
 

var request = new XMLHttpRequest();
request.open('post', 'ct.php', true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
request.send(   '?reff='+reff+
                '&page='+page+
                '&browser='+browser+
                '&browser_lang='+browser_lang+
                '&system='+system+
                '&aufloesung='+aufloesung
    );

PHP Code nimmt die Daten entgegen und schickt sie per Email an mich, hatte noch kein Bock eine DB zu erstellen, bevor ich das mit dem JavaScript nicht auf die Reihe bringe.
PHP:
<?php
header('Content-Type: text/html; charset=utf-8'); // sorgt für die korrekte Kodierung
header('Cache-Control: must-revalidate, pre-check=0, no-store, no-cache, max-age=0, post-check=0'); // ist mal wieder wichtig wegen IE


$mail  = $_POST['reff']."\n";
$mail .= $_POST['page']."\n";
$mail .= $_SERVER['REMOTE_ADDR']."\n";
$mail .= $_POST['browser']."\n";
$mail .= $_POST['browser_ver']."\n";
$mail .= $_POST['browser_lang']."\n";
$mail .= $_POST['system']."\n";
$mail .= $_POST['browser_id']."\n";
$mail .= $_POST['aufloesung']."\n";
$mail .= $_SERVER['HTTP_USER_AGENT']."\n";
$mail .= $_POST['mobile']."\n";

mail('system@meinedomain.net', 'ReffererScript',$mail, 'From: SYSTEM <NoReplay@meinedomain.net>');
In Moment funktioniert das Script nur auf der Domain, wo das Script auch liegt. Auf anderen Domains funkioniert es nicht und mir fällt langsam nix mehr ein, was ich noch testen könnte. Wer hat paar Tipps für mich?

Gruß OrderMax
 

basti1012

Erfahrenes Mitglied
#2
denk dran das es noch die CORS gibt,
Die Browser unterbinden das eigentlich das du Daten von einer Homepage zur anderen schickst.
Liegen deine Datein ( index.php und ct.php ) auf der gleichen domain ?
 

OrderMax

Grünschnabel
#3
Hmm, noch nie was von CORS gehört. Nein, das Script soll ja auf verschiedenen Domains zum Einsatz kommen. Die Counter wie Statscount, Piwik, Google Analystics, werden oft von AddOns und anderen Tools gerne geblockt. Deshalb der Versuch etwas eigenes zu programmieren.
 

basti1012

Erfahrenes Mitglied
#4
sowas habe ich auch schon mal gemacht.Solange die domain die gleiche ist ,ist das kein problem.
Ich meine damit
tutorials.de , und was danach steht ist egal tutorials.de/ab/hier/geht/jede.adresse.de

Nur wenn die domain nee andere ist muss man das anders regeln.
Ansonsten sieht dein Script so aus wie meins .Ich habe das

Javascript:
gg=location.href;
ff=gg.split('/');
dd=ff.length-1;
name=gg.split('/')[dd];
 
         $.ajax({
             type: 'POST',
              url: '<?php echo $rootverzeichniss; ?>admin/besucherzahler.php',
            
             data: {name:name,gg:gg},
             success: function(data){
 //alert(data)
                      }
                  });
im footer eingebunden ,und der footer ist mit php auf jede andere Seite eingebunden.
So werden alle Seiten erfasst und alles weitere kann man da verwerten.

Wenn du was fertiges suchst kann ich das empfehlen
PHP Statistik Counter Webstat Datenbank MySQL Analyse
einmal installieren ,Script einbinden und schon läuft es
 

OrderMax

Grünschnabel
#5
Danke, das Script kenn ich, ich glaube ich hab sogar noch eine Lizenz hier liegen.
Ich will aber eine Multidomainlösung und es sollte auch mit JavaScript funktionieren, weil ich noch paar alte statische Seiten habe und externe Blogs, wo kein PHP Code erlaubt ist.
 
Zuletzt bearbeitet:

basti1012

Erfahrenes Mitglied
#6
wenn du ja Inhaber der Domain bist müsste das ja auch gehen.
Ich weiß jetzt zwar nicht wie ,aber googel und co läßt es ja auch zu das die user ihre api scripte einbinden und dudurch der request zur fremden Domain zugelassen wird. Es muss da irgendwie nee Einstellung oder sonst was geben der die CORS nicht blockt.

Aber ich werde mich heute auch mal schlau machen weil will das auch mal testen ob das bei mir irgendwie geht. Getestet hatte ich das schon mal doch die CORS ( kann man in der Console sehen ) den Request nicht durch gelassen hat. Hatte da aber auch nicht weiter versucht.

googel ,facebook usw zeigen mit hren Scripten ja das es ja irgendwie gehen muß.
 

OrderMax

Grünschnabel
#7
Ich hab schon gegoogelt, aber so wirklich verstehe ich das nicht. Vielleicht wäre es mit einem Pixel möglich. Man bekommt vielleicht nicht soviele Informationen, aber immerhin kann ich den User zählen. Weißt du vielleicht wie man den Aufruf eines Pixels zählt?
 

basti1012

Erfahrenes Mitglied
#8
ich weiß nicht was du mit Pixel zählen meinst ?.
Aber du willst ja nur die Daten deiner Besucher zu deiner anderen Domain schicken,
mehr wolltest du ja nicht oder ?
Habe jetzt reichlich gelesen und solangsam verstehe ich das auch besser wie das geht.
Das die CORS nicht mehr blockt habe ich schon hinbekommen doch noch bleibt der Alert leer.
Wollen wir mal sehen ob ich den Rest auch noch hin bekomme weil dann bin ich auch glücklich und werde es gleich auch selber nutzen:)
 

OrderMax

Grünschnabel
#9
Ja, so wollte ich das. Es soll ja die Möglichkeit geben User per Pixel zu zählen. Man bindet extern eine Grafik ein und lässt sie dann beim abrufen zählen. Das meinte ich mit Pixel. Wäre super wenn du das hinbekommst. Ich versteh das immer noch nicht mit dem headern, wo und was geschickt werden muß.
 

basti1012

Erfahrenes Mitglied
#10
User per Pixel zählen ? Nagut das habe ich noch nicht gehört ,aber goggel ich mal nach.
Das mit den Script soll in 2 verschiedene Variante gehen .
Den Request den du auch schon gemacht hast nur mit den CORS Mist muß man bei Server zugelassen werden. Das habe ich bei mir jetzt hinbekommen . Der Request geht durch und wird nicht geblockt. Ich verstehe nur noch nicht warum das php Script den Request nicht zurück gibt ,bzw speichert ( weil speichern ist ja auch dein Ziel ).
Da muss ich mich wohl noch in den Header Daten kram weiter einlesen , oder hier weiß einer das wie man genau einstellen muß.

Dann soll das auch mit JASON gehen. JJASON hat da irgendwie keine CORS die da zwischen fummelt. Nur das habe ich kurz überflogen weil muß mich erst bei einen durch arbeiten und verstehen.

Auf einer Webseite habe ich auch das gefunden

CSS:
Browser-Unterstützung für CORS ist heutzutage gut.
In der Vergangenheit mussten Sie möglicherweise ActiveXObject oder XDomainRequest
in Internet Explorer verwenden, da dies nur eingeschränkte Funktionen bot.

JSONP kann verwendet werden, um die CORS-Einschränkungen zu umgehen,
hat aber auch eigene Einschränkungen.

Ein anderer Weg um CORS herum besteht darin, die Anforderung über den Server
in Ihrer Domäne zu senden. Dies ist nicht immer eine schlechte Lösung,
insbesondere wenn Sie die Zwischenspeicherung nutzen oder die API anpassen möchten.

Sie können die Überprüfung der CORS-Richtlinien auch in einigen Browsern
deaktivieren. Dies kann bei der Entwicklung hilfreich sein.
Das man das im Browser deaktivieren kann habe ich noch nicht gesehen.
Aber das andere sagt ja das es wohl geht .Bist du in JASON fit?
Vieleicht willst du da ja schon mal kucken? Ich kucke auf jeden fall bei den normalen Request weiter. Irgendwas von den Sachen wird ja gehen müssen.

Auch interesant ist ja das das eine Goggel Script ja auch die Daten abfragt und bei sich speichert.Nur finde ich bei den Script kein Request. Da weiß ich auch noch nicht genau wie die ihre Daten bekommen. Wenn dann irgendein versteckter Code oder funktion ,oder ich übersehe da irgendwas
 
#11
Also in der Browser Console sehe ich das Statcounter und Google alles als GET Parameter an eine PHP Datei t.php schicken. (https://c.statcounter.com/t.php?....) Vielleicht wirst du aus dem Code hier schlau (
https://www.statcounter.com/counter/counter.js)

Bei mir scheint aber CORS nicht das Problem zu sein. Ich hab jetzt andere Domains ausprobiert. So wie es aussieht, liegt es an SSL Domains. Von denen kommen keine Daten, auch nicht, wenn ich die JS Datei per https einbinde.
 

basti1012

Erfahrenes Mitglied
#12
Mit GET sollte das ja eigentlich kein problem sein.
Nur kann ich jetzt gar nix mehr testen weil filezilla nicht mehr auf mein strato geht. Keine ahnung was das schon wieder soll. Habe suport da schon angeschrieben aber die melden sich auch nicht.

Mein anderer bei bplaced ist ja eigentlich 0815 laden da ,aber der suport ist da echt klasse und nicht wie bei strato oder sonst was :mad:
 

basti1012

Erfahrenes Mitglied
#13
So ich habe es jetzt.
Ich habe den Server gesagt das er GET und POST vom Server X annehmen darf und dann geht das auch.
Keiin CORS und kein problem.
Da ich vei Strato nicht rein komme habe ich es halt mal über codepen gemacht
EMeXxZ

Wie du siehst kann ich die texte empfangen und speichern. Genau so machst du das dann mit dein statistik script. Den callback om Server brauchst du dann ja nur wenn du gleichzeitig einen Counter anzeigen lassen willst. ansonsten brauchst du ja nur die Besucherdaten uüber get pder post verschicken und der rest macht dein Server dann
 
#14
Also ist es eine Servereinstellung, des empfangenden Servers? Dachte hat was mit dem Browser zu tun und dem sendeden Server, der das Senden aus Sicherheitsgründen unterbindet, oder verstehe ich da was falsch.

Mein Code funktioniert jetzt, das Problem war SSL. Beim testen hab ich nur die JS per https eingebunden und die php vergessen. Was ich noch nicht getestet hab, ist das zählen von einem externen Server.
 

basti1012

Erfahrenes Mitglied
#15
wie das genau geht weis ich auch nur halbwegs.

1. Der Browser schickt den Request an den Server. Im Header steht unter "Origin:" die anfragende Domain
2. Der Server kann nun (wenn er will) diese Origin auswerten, schauen ob sie zugriffsberechtigt ist, und sie dann (falls ja) zusammen mit der Antwort im "Access-Control-Allow-Origin:" Response-Header zurückschicken.
3. Der Browser wirft eine SOP-Exception, falls seine Origin-Domain nicht mit der Domain in "Access-Control-Allow-Origin" übereinstimmt

Es gibt die folgenden Fälle:
- Server sendet den Response-Header "Access-Control-Allow-Origin" gar nicht => Es sind keine CORS-Requests erlaubt.
- Server sendet "Access-Control-Allow-Origin: *" => Alle Domains dürfen CORS-Requests an den Server schicken
- Server sender "Access-Control-Allow-Origin: <GenauEineDomain>" => Die aufgeführte Domain darf CORS-Requests an den Server schicken.

Server, die CORS nur von bestimmten Domains zulassen wollen, senden im allgemeinen den vom berechtigen Client gesendeten Origin-Header einfach zurück. Dieses Vorgehen verhindert, dass nicht berechtigte Clients die berechtigte Domain im Response-Header sehen können
Ich habe auf der Empfängerseite ( mein server ) im Php Script gesagt erlaube codepen.io . Dadurch weiß der Browser das mein Server das erlaubt und gibt keine CORS Warnung mehr aus .
So verstehe ich das alles. Falls ich falsch liege wird das sicherlich einer sagen hier.

Wie hast du das den jetzt gemacht ? Also auf den Sender und empfänger Server ?
Welche Scripte benutzt du da damit du deine Besucherdaten auf den anderen Server auswerten kannst ?
 
#16
Eigentlich hab ich zwei Sachen geändert. JS Script wird je nach Domain per https bzw über http eingebunden:
Javascript:
<script type="text/javascript">
  var bm_host = (("https:" == document.location.protocol) ? "https://" : "http://");
  document.write("<sc"+"ript type='text/javascript' src='"+bm_host+"DOMAIN.NET/COUNTER/ct.js'></"+"script>");
</script>
und in der Java Datei wird PHP per https eingebunden und seit dem funktioniert es. Externe Server hab ich damit noch nicht getestet.
 

Neue Beiträge