ไม่สามารถตั้งค่าคุกกี้ใน iframe โดยใช้ Storage Access API บน Safari


9

ฉันมี iframe บนหน้าของฉัน ในฐานะที่เป็น Safari บล็อกคุกกี้ของบุคคลที่สามฉันพยายามใช้ Storage Access API ตามที่แนะนำที่นี่ภายใต้ 'คำแนะนำสำหรับนักพัฒนา': https://webkit.org/blog/10218/full-third-party-cookie-blocking-and-more / . ฉันได้คัดลอกรหัสต่อไปนี้จากเอกสาร :

<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>

เอาต์พุตคอนโซลเบราว์เซอร์:

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

อย่างที่คุณเห็นการบริจาคดูเหมือนจะสำเร็จ แต่ก็ยังไม่สามารถตั้งค่าคุกกี้ได้ ใครบ้างมีความคิดว่ามีอะไรผิดปกติ?

Safari เวอร์ชัน 13.0.1

แก้ไข:เอาท์พุทคอนโซลบน Safari 13.1:

[Log] hasAccess: false
[Log] error

หมายเหตุ:หน้าปิดล้อมเป็นiframeแท็กธรรมดาที่มีการsrcชี้ไปที่หน้านี้


1
ฉันมีปัญหาเดียวกัน ดูเหมือนว่าการเข้าถึงที่เก็บข้อมูลจะให้การเข้าถึงคุกกี้ที่มีอยู่ แต่จะไม่เก็บคุกกี้ใหม่ ๆ สิ่งนี้ใช้กับการใช้ "document.cookie" เช่นเดียวกับคุกกี้ใหม่ที่ส่งคืนในส่วนหัว "Set-Cookie" เอกสารดูเหมือนว่าจะใช้งานได้ แต่ไม่ได้ผล
Matt Cosentino

ด้วย Safari 13.1 คำขอถูกปฏิเสธ แต่ฉันไม่เข้าใจว่าทำไม
จันทร์ที่

1
ใช่มันน่าผิดหวังจริงๆ BTW Safari 13.1 เริ่มทำงานเหมือนกันดูเหมือนจะให้การเข้าถึง แต่การตั้งค่าคุกกี้ล้มเหลว
lunr

เนื่องจากบทความนี้ระบุว่ามีกฎบางข้อที่ให้สิทธิ์การเข้าถึง และไม่ควรconsole.log('Now we have first-party storage access!');มาในthenของrequestStorageAccess()?
Supun Kavinda

@SupunKavinda กฎ 3 ข้อแรกใช้ไม่ได้ที่นี่ ฉันไม่เข้าใจกฎข้อที่ 5 อย่างสมบูรณ์บางทีมันอาจหมายถึงกลไกบางอย่างที่มีบัญชีดำในโดเมน ฉันไม่คิดว่ามันจะนำไปใช้ แต่ฉันจะลองบางสิ่งเพื่อดูว่าเกี่ยวข้องกันหรือไม่
lunr

คำตอบ:


3

TL; DR

ตรวจสอบให้แน่ใจว่ามีการตั้งค่าคุกกี้ไว้แล้วสำหรับโดเมนในบริบทของบุคคลที่หนึ่ง


มีสองสิ่งที่ต้องระวังด้วยตัวอย่างโค้ดนั้น โปรดทราบว่ามีการทดสอบใน Safari 13.1 ต่อไปนี้

เงื่อนไขของพรอมต์ของผู้ใช้และการอนุญาตให้เข้าถึงภายหลัง:

  1. document.requestStorageAccessจะต้องมีการเรียกเป็นผลมาจากการกระทำของผู้ใช้ แม้จะมีการบันทึกไว้ในเอกสาร MDN , document.hasStorageAccessดูเหมือนจะไม่เผยแพร่การกระทำของผู้ใช้
  2. ผู้ใช้ต้องมีปฏิสัมพันธ์กับบุคคลที่สามในบริบทของบุคคลที่หนึ่งแล้ว การคลิกที่เอกสารใด ๆ จะทำ

เงื่อนไขในการเขียนคุกกี้:

ต้องตั้งค่าคุกกี้บนโดเมนในบริบทของบุคคลที่หนึ่งแล้ว คุกกี้นี้สามารถตั้งค่าโดยเซิร์ฟเวอร์เป็นส่วนหัวการตอบสนองหรือโดย JS โดยใช้ document.cookie ด้วยการทดสอบเพิ่มเติมเล็กน้อยดูเหมือนว่าคุกกี้นี้จะต้องไม่ถูกตั้งค่าด้วยการตั้งค่าโดเมนเพื่อให้มีการตั้งค่าคุกกี้ที่ตามมาในบริบทของบุคคลที่สาม ซึ่งหมายความว่าจะต้องตั้งค่าคุกกี้ที่มีอยู่ในโดเมนย่อยเดียวกัน


คุกกี้ทำงานโดยคำนึงถึงเงื่อนไขเหล่านี้ แต่ดูเหมือนว่าคุณจะต้องร้องขอการเข้าถึงแต่ละครั้งดังนั้นเราจึงพบว่าสิ่งนี้ใช้ไม่ได้ในตอนนี้ บางทีเราอาจทำสิ่งอื่นผิดไป ในกรณีใด ๆ เราตัดสินใจที่จะทำสิ่งนี้แตกต่างกัน ขอบคุณ
lunr

@lunr คุณสามารถแบ่งปันผลลัพธ์ได้หรือไม่
Sergey Korzhov

@ ที่ฉันมีปัญหาเดียวกัน มีวิธีใดบ้างที่เราสามารถตั้งค่าคุกกี้ได้หรือไม่อยู่ใน IFrame
MikBTC
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.