Why does Safari not allow to Store Cookie for iframe?

Safari og Iframes: En Cookie-udfordring

24/02/2026

Rating: 4.53 (16643 votes)

I den stadigt udviklende verden af webudvikling støder vi ofte på unikke udfordringer, især når det kommer til browserkompatibilitet. En af de mest markante og frustrerende af slagsen for mange udviklere har været Safaris specifikke håndtering af cookies sat inden for iframes, især i cross-domain scenarier. Dette fænomen kan skabe betydelige problemer for applikationer, der er afhængige af sømløs dataudveksling mellem forskellige domæner via indlejrede frames.

Does Safari work with iframes?
Safari is the only browser that does this. In order to get around the issue, the parent (src) and child/iframed/remote (dest) site have to work together, if the source site only wants users to access the destination via the iframe and can't assume that the user has visited the destination host before.
Indholdsfortegnelse

Safari's Cookie-Restriktioner i Iframes

Som standard har Safari en strengere politik for, hvordan cookies kan sættes og tilgås i iframes, når disse iframes stammer fra et andet domæne end den overordnede side. Helt konkret vil Safari som udgangspunkt kassere cookies, der sættes i en iframe, medmindre det domæne, der hoster iframen, allerede har haft en cookie sat fra den besøgende før, og uden for iframen. Dette er en isoleret adfærd, som kun ses i Safari, hvilket gør det til en særlig hovedpine for udviklere, der sigter mod en universel brugeroplevelse.

Forestil dig et scenarie, hvor din primære hjemmeside (Site A) indlejrer en iframe fra et andet domæne (Site B). Indholdet i iframen, dvs. Site B, interagerer med sine egne REST API'er og indlæser dynamisk andet indhold fra Site B baseret på API-svar. Hvis brugeren ikke tidligere har besøgt Site B direkte og accepteret en cookie der, vil forsøget på at sætte en cookie fra Site B via iframen mislykkes i Safari. Dette resulterer ofte i fejlmeddelelser som "Cookies er ikke slået til i din browser", selvom cookies er aktiveret i brugerens browserindstillinger. Dette problem er særligt udtalt i Safari version 11 og fremadrettet.

Hvorfor denne adfærd?

Apple har implementeret denne restriktion som en del af deres bestræbelser på at forbedre brugernes privatliv og sikkerhed. Ved at begrænse tredjeparts cookies i iframes forsøger Safari at forhindre cross-site tracking, hvor websteder kan spore brugeradfærd på tværs af forskellige domæner uden brugerens eksplicitte samtykke. Selvom formålet er prisværdigt, skaber det en betydelig teknisk barriere for legitime applikationer, der bruger iframes til funktionelle formål snarere end tracking.

En Løsning: "Bounce"-metoden

Heldigvis er der en anerkendt metode til at omgå denne Safari-specifikke begrænsning. Løsningen kræver et samarbejde mellem det domæne, der hoster iframen (kaldet "kilde" eller "parent"), og det domæne, der leverer indholdet i iframen (kaldet "destination" eller "child"). Denne metode er især nyttig, hvis kilde-domænet ønsker at sikre, at brugere kun kan tilgå destinations-domænet via iframen, og hvis det ikke kan antages, at brugeren allerede har besøgt destinations-domænet tidligere.

Den grundlæggende idé bag løsningen er at indføre et mellemliggende trin, der sikrer, at destinations-domænet får mulighed for at sætte en cookie, før brugeren interagerer med indholdet i iframen. Normalt ville en bruger navigere direkte fra side A (uden iframe) til side B (med iframe). For at implementere work-around'en, ændres linket fra side A. I stedet for at pege direkte på side B, peger linket på en "bounce" URL på destinations-domænet. Denne bounce URL er designet til at sætte en cookie (navn og værdi er ligegyldigt, det vigtigste er, at en cookie bliver sat) og derefter omdirigere brugeren tilbage til den oprindelige side B, som nu vises i iframen.

Implementeringsdetaljer

Lad os dykke ned i, hvordan dette kan implementeres. Vi skal have to dele: en "src" (kilde) fil og en "dest" (destination) fil.

Src-filen (Kilde)

Denne fil vil indeholde den side, der indlejrer iframen. Den skal have en mekanisme til at håndtere en parameter, der indikerer, om brugeren er blevet omdirigeret.

// src.php // Antager at du har et link på din side, der peger på "bounce" URL'en. // F.eks. Bounce her...if (isset($_GET['redirected']) && $_GET['redirected'] === 'true') { echo "

Cookies match!

"; } else { echo "

Welcome to the source page.

"; echo ""; }

Dest-filen (Destination)

Denne fil er den, der indlejres i iframen. Den skal kunne modtage en omdirigerings-URL, sætte en cookie og derefter omdirigere brugeren.

Is there an HTML page for iframe?
There is an html page that works correctly on any Windows and Android (shows content of iframe). Hosting by Github Pages. It works on iOS version 12.5.1, but no on 14.6 (blank page on Chrome, Safari, Opera). Why? Tried src with wikipedia - ok everything.
// dest.php // Sæt en simpel cookie setcookie('safari_iframe_test', '1', 0, '/'); // Hent den oprindelige URL, som brugeren skal omdirigeres til $redirect_url = isset($_GET['redirect_url']) ? $_GET['redirect_url']: 'http://source.com/src.php'; // Omdiriger brugeren header("Location: " . $redirect_url); exit(); 

Vigtigt: Disse kodeeksempler er forenklede og kun til demonstration. I en produktionsindstilling skal du nøje overveje sikkerhedsaspekterne og validere alle input, især `redirect_url`, for at forhindre potentielle sikkerhedshuller som open redirect vulnerabilities.

Test af Løsningen

For at teste dette, skal du placere `src.php` på ét domæne og `dest.php` på et andet. Rediger derefter linjerne 2 og 3 i `src.php` til at pege på de korrekte URL'er for dine filer.

  1. Test uden løsning (Safari): Åbn en "ren" Safari-browser (dvs. en, hvor du aldrig har sat en cookie fra destinations-domænet før). Naviger til `http://source.com/src.php?redirected=true`. Du vil se en iframe. Klik på linket inde i iframen (som peger direkte tilbage på `src.php?redirected=true`). Du vil sandsynligvis få fejlmeddelelsen "Cookies not set!".
  2. Test med løsning (Safari): I samme browser, naviger til `http://source.com/src.php` (uden `?redirected=true`). Klik på linket "Bounce her..." (som peger på `http://destination.com/bounce.php?redirect_url=http://source.com/src.php?redirected=true`). Dette vil sætte cookien og omdirigere dig. Klik derefter på linket inde i iframen igen. Nu bør du se "Cookies match!".
  3. Test i andre browsere (Chrome, Firefox etc.): I disse browsere kan du normalt blot navigere til `http://source.com/src.php?redirected=true` og få "Cookies match!" uden at skulle igennem bounce-trinnet, da de ikke har den samme strenge iframe-cookie-politik.

Tabel: Sammenligning af Safari og Andre Browsere

Her er en simpel tabel, der illustrerer forskellen i cookie-håndtering for iframes:

BrowserCookie sat i iframe (cross-domain) uden forudgående besøgKrav om forudgående cookie-sætning
SafariMislykkes som standardJa, destinations-domænet skal have sat en cookie før
ChromeFungererNej
FirefoxFungererNej
EdgeFungererNej

Ofte Stillede Spørgsmål (FAQ)

Hvorfor tillader Safari ikke lagring af cookies i iframes?

Safari begrænser som standard cookies i iframes fra andre domæner for at forhindre cross-site tracking og beskytte brugernes privatliv. Dette er en sikkerhedsfunktion, men kan påvirke funktionaliteten af webapplikationer.

Er der andre løsninger end "bounce"-metoden?

Mens "bounce"-metoden er den mest almindelige og effektive løsning, kan alternative metoder involvere brug af `localStorage` eller `sessionStorage` (som også har deres egne begrænsninger i iframes på tværs af domæner) eller server-side løsninger, der sender data via POST-anmodninger i stedet for at stole på cookies. Dog er disse ofte mere komplekse at implementere.

Hvad er konsekvenserne af at bruge "bounce"-metoden?

Den primære ulempe er den ekstra omdirigering, som brugeren skal igennem, hvilket kan påvirke brugeroplevelsen en smule. Derudover skal du være meget opmærksom på sikkerheden for at undgå redirect-sårbarheder.

Hvornår blev denne Safari-begrænsning introduceret?

Begrænsningen blev mere markant med introduktionen af Intelligent Tracking Prevention (ITP) i Safari, og specifikke ændringer i håndteringen af tredjeparts cookies i iframes blev tydelige omkring Safari 11.

Konklusion

Selvom Safaris håndtering af cookies i iframes kan virke som en hindring, er det muligt at navigere udfordringen med den velkendte "bounce"-metode. Ved at forstå den underliggende årsag til begrænsningen og implementere løsningen korrekt, kan udviklere sikre en mere ensartet og funktionel oplevelse for alle brugere, uanset hvilken browser de foretrækker. Husk altid at prioritere sikkerhed og grundig testning, når du implementerer sådanne løsninger.

Hvis du vil læse andre artikler, der ligner Safari og Iframes: En Cookie-udfordring, kan du besøge kategorien Teknologi.

Go up