HTTP Request von JS zu PHP und GET übergabe

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • HTTP Request von JS zu PHP und GET übergabe

    Hallo,

    ich baue aktuell an einer Tracking Möglichkeit für Shops.
    Es ist möglich ein JavaScript in einen Shop einzubinden, welches dann an meinen Server an eine PHP Datei Daten per GET sendet und dann ein Cookie erstellt, welches den Nutzer immer wieder identifizieren kann.

    Leider habe ich Probleme beim anlegen von Cookies in der PHP.
    Ich möchte möglichst kein jQuery (wegen der performance) für einen ajax Request benutzen, aber damit hat es aktuell funktioniert.. nur mit einen normalem HTTP Request nicht..

    Das ist mein JavaScript welches in den Shop eingebunden wird
    PHP-Code:
    <script type="text/javascript">
    //<![CDATA[
    var client = {
    identifier'1'
    };
    var 
    product = {
    identifier"123456789"
    };
    (function() {
    var 
    document.createElement("script");
    s.id "ccretartg";
    s.type "text/javascript";
    s.async;
    s.src = ("https:" == document.location.protocol "https://" "http://") + "www.website.de/test/tracking.js";
    var 
    document.getElementsByTagName("script");
    var 
    l[l.length-1];
    x.parentNode.insertBefore(sx);
    })();
    //]]>
    </script
    Das Script bindet dann folgende Datei ein, welche dann die Parameter an meinen Server per GET sendet.

    PHP-Code:
    var products_array=[];
    products_array.push(product);
    var 
    products={};
    products.product products_array;
    json_str_products JSON.stringify(products);

    json_str_client client.identifier;

    var 
    url "http://www.website.de/test/php/tracking.php";
    var 
    data 'c='+json_str_client+'&p='+encodeURIComponent(json_str_products);

    //funktioniert
    $.ajax({
        
    type"GET",
        
    urlurl,
        
    datadata
        
    dataType"jsonp"
    });

    //funktioniert nicht!!!
    $.ajax({
        
    type"GET",
        
    urlurl,
        
    datadata
        
    dataType"html"
    });

    //funktioniert auch nicht!!!
    var xmlHttp null;
    xmlHttp = new XMLHttpRequest();
    xmlHttp.open"GET"url+"?"+datafalse );
    xmlHttp.sendnull );
    return 
    xmlHttp.responseText
    Wenn ich die Scripte alle auf der selben Domain teste, dann funktioniert alles super und das Cookie wird auch von der PHP angelegt und korrekt ausgelesen.

    Wenn ich aber die JS Scripte von einer anderen Domain auslese, dann funktioniert es nur mit der ersten jQuery AJAX Variante.. bei der zweiten jQuery Variante bekomme ich im CROME Debugger immer den Status "canceled"

    und bei der dritten mit xmlHttp wird die PHP zwar korrekt aufgerufen und ich erhalte auch eine korrekte Response Cookies Mitteilung im Chrome, allerdings wird bei jedem Aufruf immer ein neuer Cookie angelegt, weil der zuvor angelegte nicht erkannt wird... O_o

    Kann mir jemand erklären wieso das nicht geht und wie ich die Parameter noch anders übergeben kann außer mit jQuery...
    Zuletzt geändert von BananaJo; 16.02.2014, 23:13.

  • #2
    Cross-Domain AJAX-Request sind nicht erlaubt. Diese Beschränkung wird mittels JSONP-Technik umgangen.

    Kommentar


    • #3
      danke für die Antwort h3ll!

      Also ist diese Möglichkeit nur gebeben, wenn man JSONP verwendet? Oder hat das auch etwas mit den Server Einstellungen zu tun wo die PHP Datei liegt die den Cookie erzeugt?

      Es gäbe ja noch die Möglichkeit mir einem Pixel zu arbeiten, was auch sehr gut funktioniert, nur wollte ich komplett mit Javascript arbeiten und möglichst kein Framework wie jQuery für den Aufruf der PHP benutzen.

      Such bitte mal im Quellcode hier LTB NOPOC - Langarmshirt - navy - Zalando.de nach "sociomantic".. arbeiten die auch mir JSONP ?? Hier ist das selbe Prinzip was ich auch verwenden möchte.. dort wird auch der Nutzer getrackt und ein Cookie angelegt... Wie gehen die dort vor?

      Kommentar


      • #4
        Zitat von BananaJo Beitrag anzeigen
        Also ist diese Möglichkeit nur gebeben, wenn man JSONP verwendet?
        Nein, Stichwort CORS.

        Such bitte mal im Quellcode hier […] nach "sociomantic".. arbeiten die auch mir JSONP ?? Hier ist das selbe Prinzip was ich auch verwenden möchte.. dort wird auch der Nutzer getrackt und ein Cookie angelegt... Wie gehen die dort vor?
        Wie wär’s wenn du das mal selber rausfindest?
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Wenn ich wüsste wonach ich da Suchen soll um heraus zu finden was die benutzen würde ich das ja auch machen... geht schließlich auch schneller als das hier zu posten und auf eine Antwort zu warten..

          Leider weiß selbst ich nicht alles

          Kommentar


          • #6
            JS Cookie über mehrer Domains gültig anlegen

            Hallo,

            Ich daue aktuell an einer Tracking Möglichkeit und nutze dafür JavaScript Cookies.

            Über ein eingebundenes JS Script von TRACKING-WEBSITE-1 im SHOP-2 wird das Cookie entweder angelegt oder ausgelesen, falls es schon vorhanden ist.

            Mein Problem ist folgendes. Wenn ich das Script auf TRACKING-WEBSITE-1 aufrufe auf der das eigentliche Script auch liegt, kann ich das Cookie auch auf SHOP-2 und SHOP-3 usw problemlos auslesen und weiter benutzen.

            Wenn ich das erste Cookie aber auf SHOP-2 anlege, wird auf SHOP-3 und allen anderen immer wieder ein neues Cookie angelegt.

            Nur wenn ich das Script auch von der Domain aufrufe, wo das Script gepeichert ist, kann ich es auch auf anderen Domains weiter verwenden.

            Kann mit jemand sagen wieso das so ist?
            Ich habe mir als Vorbild andere Trackingscripts genommen, bei denen das Problemlos funktioniert.. nur leider bei mir nicht.

            so erstelle ich das Cookie wenn es noch nicht vorhanden ist.
            PHP-Code:
            function setCookie(value){
                var 
            domain '';    
                
            console.log('4 - '+value);
                
                if (
            value 0) { //cookie value
                    
            var host window.location.hostname.split('.').reverse();
                    if (
            host.length && host[1].length <= && host[0].length <= 2) {
                        
            domain '.' host[2] + '.' host[1] + '.'host[0]
                    } else {
                        
            domain '.' host[1] + '.' host[0]
                    }
                    
                    
            console.log('domain: '+domain);
                    
                    var 
            futdate = new Date();
                    var 
            expdate futdate.getTime();
                    
            expdate += cookie_lifetime;
                    
            futdate.setTime(expdate);
                    
                    
            document.cookie '__sonar='+value+'; domain='+domain+'; expires='futdate.toUTCString()+'; path=/';
                }


            als reales Beispiel könnt ihr z.B. auf Zalando.de gehen und einen Artikel angucken. Wenn ihr nun im debugger unter sociomantic sucht ist dort das cookie "sonar" mit der cookie ID gespeichert die einen bestimmtem Nutzer zugeordnet wird. Wenn ihr nun auf Esprit.de geht, ist dort ebenfalls die selbe ID vorhanden. Wie machen die das?
            Zuletzt geändert von BananaJo; 19.02.2014, 13:10.

            Kommentar


            • #7
              Cookies sind immer an eine Domain (oder Subdomains davon) gebunden.
              „Domain-übergreifende” Cookies gibt es nicht.

              Und wie der Browser Cookies behandelt, die von Scripten/Ressourcen von anderen Domains gesetzt werden als der, von der die eigentliche Webseite geladen wurde, ist Einstellungssache – Stichwort third-party cookies.
              Zuletzt geändert von wahsaga; 19.02.2014, 13:22.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                ist das dann eine Einstellungssache von dem Server der Website auf dem das Script geladen wurde oder wie?

                Kommentar


                • #9
                  In erster Linie natürlich im Browser.

                  Die Einflussmöglichkeiten des Servers beschränken sich auf eine P3P-Policy.
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    Also ich habe festgestellt, das wenn ich den SHOP-2 lade wenn im SHOP-1 zuvor das Cookie angelegt wurde, dass im SHOP-2 die ursprüngliche Cookie ID im Request Header angezeigt wird. Leider kann ich diese nicht abgreifen, so dass ein neues Cookie angelegt wird. Die ID im Request Header bleibt aber trotzdem die alte... ich bin verwirrt

                    Was mache ich denn Falsch?

                    Kommentar

                    Lädt...
                    X