Safari'deki Depolama Erişimi API'sını kullanarak iframe'de çerez ayarlanamıyor


11

Sayfamda bir iframe var. Safari 3. taraf çerezlerini engellediğinden, burada 'Geliştirici Kılavuzu' altında önerilen Depolama Erişimi API'sını kullanmaya çalışıyorum: https://webkit.org/blog/10218/full-third-party-cookie-blocking-and-more / . Aşağıdaki kodu belgelerden kopyaladım :

<script type="text/javascript">
  window.addEventListener('load', () => {
    document.getElementById('test-button').addEventListener('click', () => {
      document.hasStorageAccess().then(hasAccess => {
        console.log('hasAccess: ' + hasAccess);
        if (!hasAccess) {
          return document.requestStorageAccess();
        }
      }).then(_ => {
        console.log('Now we have first-party storage access!');
        document.cookie = "foo=bar";
        console.log(`document.cookie: ${document.cookie}`);
      }).catch(_ => {
        console.log('error');
      });
    });
  });
</script>

<button id="test-button">Test</button>

Tarayıcı konsolu çıkışı:

[Log] hasAccess: true
[Log] Now we have first-party storage access!
[Log] document.cookie: 

Gördüğünüz gibi, hibe başarılı görünüyor ancak yine de çerezi ayarlayamıyor. Neyin yanlış olduğu hakkında bir fikri olan var mı?

Safari Sürüm 13.0.1

EDIT: Safari 13.1 konsol çıkışı:

[Log] hasAccess: false
[Log] error

Not: Ekteki sayfa, bu sayfayı işaret eden basit bir iframeetikettir src.


1
Bende aynı sorun var. Depolama alanına erişim, mevcut çerezlere erişim sağlıyor gibi görünüyor ancak yenilerini saklamaz. Bu, "Set-Cookie" başlığında döndürülen yeni çerezlerin yanı sıra "document.cookie" kullanımı için de geçerlidir. Belgelerin çalışması gerektiği söyleniyor, ancak çalışmıyor.
Matt Cosentino

Safari 13.1 ile istek reddedildi, ancak nedenini anlayamadım.
lunr

1
Evet, gerçekten sinir bozucu. BTW Safari 13.1 aynı şekilde davranmaya başladı, erişim veriyor gibi görünüyor, ancak çerezleri ayarlama başarısız oluyor.
ay

Bu makalede belirtildiği gibi erişim izni vermek için bazı kurallar vardır. Ve, olmamalıdır console.log('Now we have first-party storage access!');gelip thenarasında requestStorageAccess()?
Supun Kavinda

@SupunKavinda İlk 3 kural burada geçerli değildir. Kural 5'i tam olarak anlamıyorum. Belki de alan adını kara listeye alan başka bir mekanizmaya atıfta bulunuyor. Bunun da geçerli olduğunu düşünmüyorum, ancak bunun ilgili olup olmadığını görmek için birkaç şey deneyeceğim.
lunr

Yanıtlar:


4

TL; DR

Birinci taraf bağlamında alan adı için önceden bir çerez ayarlandığından emin olun.


Bu kod örneğiyle dikkat edilmesi gereken birkaç şey var. Lütfen aşağıdakilerin Safari 13.1'de test edildiğini unutmayın.

Kullanıcı istemi ve sonraki erişim izni koşulları:

  1. document.requestStorageAccessbir kullanıcı işlemi sonucunda çağrılmalıdır. Üzerinde belgelenmiş olmasına rağmen MDN docs , document.hasStorageAccesskullanıcı eylemi yaymak için görünmüyor.
  2. Kullanıcının üçüncü tarafla zaten bir birinci taraf bağlamında etkileşim kurmuş olması gerekir. Belgeye herhangi bir tıklama yapılır.

Çerez yazabilme koşulları:

Alan adında, bir birinci taraf bağlamında bir çerez önceden ayarlanmış olmalıdır. Bu çerez sunucu tarafından yanıt başlığı olarak veya document.cookie kullanılarak JS tarafından ayarlanabilir. Biraz daha test yapılması durumunda, sonraki çerezin üçüncü taraf bağlamında ayarlanması için bu çerezin alan bayrağı ile ayarlanmaması GEREKİR gibi görünüyor. Bu, gerçekte mevcut çerezin aynı alt alan adına da ayarlanması gerektiği anlamına gelir.


Çerezler bu koşulları dikkate alarak çalışır. Ancak her seferinde erişim istemeniz gerekiyor gibi görünüyor, bu yüzden şimdilik kullanılamaz buluyoruz. Belki de hala yanlış bir şeyler yapıyorduk. Her durumda, bunu farklı yapmaya karar veriyoruz. Teşekkürler.
lunr

@lunr Sonucu paylaşabilir misiniz?
Sergey Korzhov

@burada aynı sorun var. IFrame'de çerezleri ayarlayabilmemizin herhangi bir yolu var mı?
MikBTC
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.