Ich habe die Anforderung, von meiner Anwendung aus auf die Website eines Drittanbieters (SSO) zu navigieren. Dies funktioniert gut in Chrome, IE9 und Firefox, aber nicht in Safari. Es gab eine Problemumgehung, um einen Iframe auf der Seite zu verstecken, um den Cookie zu setzen und dann zum eigentlichen iframe zu navigieren, aber dieser Trick funktioniert jetzt nicht mehr. Ich habe auch versucht, ein neues Fenster mit Aktion als Drittanbieter-URL zu öffnen, um ein Cookie im Browser zu setzen und dann dasselbe im iframe zu öffnen, aber das hat den Nachteil, dass das kleine Fenster geöffnet wird, das wie ein Hack aussieht. Gibt es eine Workaround, um den Cookie in iframe für Safari Browser zu setzen?
Einführung zum Verfolgen von Cookies
"Tracking Cookies" ist ein sehr wichtiger Teil des Online-Werbe-Ökosystems. Sie haben Tonnen von Nutzungsszenarien. Hier ist ein Beispiel namens Retargeting.
Es ist bekannt, dass viele Internet-Käufer nicht kaufen, nachdem sie auf der E-Commerce-Website ein gutes Geschäft gesehen haben. Sie wählen zuerst eine gute, verlassen Website und kommen in wenigen Stunden oder Tagen zurück, um eine tatsächliche Bestellung zu machen.
Um diese Nutzer zu stimulieren, verwenden Websites sogenannte Retargeting-Technologie. Grundsätzlich möchten sie sich an Benutzer erinnern, die ihre Website verlassen haben, ohne eine Bestellung aufzugeben und ihnen eine relevante Werbung auf anderen Websites zu zeigen. Typischerweise delegieren E-Commerce-Websites solche Arbeiten an Online-Werbeplattformen wie Ad Exchange, DSPs und so weiter.
Aus technischer Sicht funktioniert es wie folgt:
Website-Besitzer legt ein kleines Stück HTML-Code. Das Stück Code wird "Tracking-Pixel" genannt. Betrachten wir einen einfachen Fall, wenn das Tracking-Pixel ein transparentes GIF-Bild ist:
... <img src="http://pixel.sample-ad-exchange.com/pixel.gif">
..
http://pixel.sample-ad-exchange.com/pixel.gif
löscht einen Cookie für die Domain '.sample-ad-exchange.com' mit dem Namen user_id. In diesem Cookie wird eine generierte eindeutige Benutzer-ID gespeichert (Wenn der Cookie bereits existiert, überspringt der Server diesen Teil einfach)
sample-ad-exchange.com erinnert sich intern an den Benutzer mit dieser ID, die die E-Commerce-Site besucht hat
Wenn sample-ad-exchange.com aufgefordert wird, eine Anzeige an einer anderen Stelle zu zeigen (z. B. indem sie tag.sample-ad-exchange.com/show_ad.js aufruft), erhält sie user_id cookie zusammen mit http request
sample-ad-exchange.com prüft intern, ob dieser Benutzer zuvor irgendwelche E-Commerce-Websites besucht hat. Wenn er hat, könnte es eine sehr relevante Werbung für ihn zeigen
Das Problem
Wie Sie sehen können, ist die Fähigkeit, Cookies zu löschen, der entscheidende Teil des Retargeting-Schemas. Diese Art von Cookies wird "Drittanbieter-Cookies" genannt, da der Pixelcode auf der Werbetreibenden-Domain sitzt (z. B. my-cool-store.com) und das Pixel selbst auf der Ad Exchange-Domain eines Drittanbieters (.sample-ad-exchange) liegt .com). Standardmäßig haben verschiedene Browser unterschiedliche Richtlinien für Cookies von Drittanbietern.
Chrome, Firefox, IE vor 8.0 - akzeptieren Sie immer Cookies von Drittanbietern
IE 8.0 und höher - akzeptieren Sie Cookies von Drittanbietern nur, wenn die Website ausdrücklich erklärt, wie sie die Cookies verwenden wird. Die Deklaration erfolgt über das P3P-Protokoll. Wie jede Spezifikation von W3C ist diese auch sehr kryptisch. Aber das Wesentliche ist der HTTP-Header namens "P3P", den Sie zusammen mit HTTP-Response mit Cookie senden müssen. Dieser Header-Inhalt funktioniert gut, obwohl ich keine Ahnung habe, was genau es erklärt: 'P3P: CP="NOI DSP COR NID CURA ADMa DEVa PSAa PSDa UNSER BUS COM INT OTC PUR STA"'
Safari - akzeptiert niemals Cookies von Drittanbietern
Safari war kein großes Problem für die Industrie, bevor das iPad erschien und große Popularität erlangte. Studien zeigen, dass iPad-Nutzer eher online einkaufen als normale PC-Leute.
Trick 1.0 (funktioniert nicht mehr)
Tatsächlich lehnt Safari manchmal 3rd Party Cookies ab. Es passiert, als Benutzer eine Aktion in Bezug auf 3rdparty-Domain durchgeführt hat. Google Analytics (und auch andere Plattformen) nutzten diese Funktion: Sie haben einen iFrame und ein simuliertes Formular in das Formular eingefügt. Ich werde hier nicht auf technische Details aufhören. Erstens kostet dieser Hack $ 22,5 Millionen und zweitens funktioniert der Trick in den letzten Versionen von Safari nicht mehr
Trick 2.0 (HTML5 localStorage)
Die Idee dieses Tricks ist die Verwendung der HTML5 localStorage API. Diese API ist Cookies sehr ähnlich - sie erlaubt es, die Benutzereinstellungen von Javascript aus zu verwalten und lokal auf der Box des Benutzers zu speichern. Warum nicht Benutzer-ID in localStorage speichern? Die erste Version von Code I kam auf:
%Vor%
Die Idee ist ziemlich einfach: Suchen Sie nach dem Schlüssel user_id im lokalen Speicher (erstellen Sie einen, wenn dieser nicht existiert) und übergeben Sie user_id als GET-Parameter an den Pixelserver. Dann wird der Server diese ID aufzeichnen und stattdessen den Cookie auslösen.
Aber dieser Code funktioniert nicht gut. Jede Domäne hat ihren eigenen lokalen Speicher. Und wenn Sie Tracking-Pixel auf my-cool-store.com abgefeuert haben, wird user_id im lokalen Speicher von my-cool-store.com gespeichert. Wenn derselbe Benutzer später andere-domain.com mit Tracking-Code besuchen würde, wird er als neu behandelt.
Um diesen alten guten Trick mit iframe zu beheben, wird es funktionieren. Anstelle von img-Tag werden wir iframe-Tag mit Quelle irgendwo innerhalb pixel.sample-ad-exchange.com einfügen. Und platzieren Sie den Benutzererkennungscode in iframe. Da Iframe "innerhalb" von pixel.sample-ad-exchange.com ausgeführt wird, ist der lokale Speicher für alle verfolgten Sites gleich. Hier ist ein komplettes Beispiel:
Tracking-Code:
%Vor% Iframe-Code ( http://pixel.sample-ad-exchange.com/iframe.html
)
Rechtliches Problem
Die interessante Frage ist, ob diese Methode legal ist. Znd, wenn das nächste Unternehmen, das es verwendet, $ 22,5 Millionen gut bekommt.Ich bin kein Anwalt, aber aus meiner Sicht des gesunden Menschenverstandes, da die Safari-Einstellungen explizit "Drittanbieter-Cookies von Drittanbietern und Werbetreibenden blockieren" und localStorage kein "Cookie" ist, erscheint der obige Ansatz legitim.
Versteckte (oder nicht versteckte!) iframes funktionieren nicht, da sie immer noch gegen die Richtlinie gleichen Ursprungs verstoßen würden.
Suchen Sie nach CORS - "Cross Origin Resource Sharing". Es ist ein Standard, der jetzt in allen gängigen Browsern implementiert ist.