सफारी पर स्टोरेज एक्सेस एपीआई का उपयोग करके iframe में कुकी सेट नहीं कर सकते


10

मेरे पेज पर एक iframe है। जैसा कि सफारी 3 पार्टी कुकीज़ को ब्लॉक करता है, मैं 'डेवलपर गाइडेंस' के तहत यहां बताए अनुसार स्टोरेज एक्सेस एपीआई का उपयोग करने की कोशिश कर रहा हूं: 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: 

जैसा कि आप देख सकते हैं, अनुदान सफल प्रतीत होता है, लेकिन फिर भी कुकी को सेट नहीं किया जा सकता है। क्या किसी को अंदाजा है कि क्या गलत है?

सफारी संस्करण 13.0.1

संपादित करें: सफारी 13.1 पर कंसोल आउटपुट:

[Log] hasAccess: false
[Log] error

नोट: संलग्न पृष्ठ इस पृष्ठ की ओर इशारा करते हुए एक सरल iframeटैग है src


1
मेरे साथ भी वही दिक्कत है। स्टोरेज एक्सेस मौजूदा कुकीज़ तक पहुँच प्रदान करने के लिए लगता है, लेकिन कोई नया स्टोर नहीं करेगा। यह "डॉक्यूमेंट.कोकी" के साथ-साथ "सेट-कुकी" हेडर में लौटे नए कुकीज़ पर भी लागू होता है। दस्तावेज़ीकरण यह कहता है कि इसे काम करना चाहिए, लेकिन ऐसा नहीं है।
मैट कॉसेंटिनो

सफ़ारी 13.1 के साथ अनुरोध को अस्वीकार कर दिया गया है लेकिन मुझे समझ नहीं आया कि क्यों।
चंद्र

1
हाँ, यह वास्तव में निराशाजनक है। बीटीडब्लू सफारी 13.1 ने एक ही व्यवहार करना शुरू किया, यह पहुंच प्रदान करता है लेकिन कुकीज़ को सेट करना विफल रहता है।
चंद्र

जैसा कि यह लेख निर्दिष्ट करता है कि एक्सेस देने के लिए कुछ नियम हैं। और, नहीं होना चाहिए console.log('Now we have first-party storage access!');में आते हैं thenकी requestStorageAccess()?
सुपुन कवींडा

@SupunKavinda पहले 3 नियम यहां लागू नहीं होते हैं। मैं नियम 5 को पूरी तरह से नहीं समझता। हो सकता है कि यह किसी अन्य तंत्र का जिक्र कर रहा हो जिसने डोमेन को ब्लैकलिस्ट कर दिया हो। मुझे नहीं लगता कि यह लागू होता है, लेकिन मैं कुछ चीजें देखने की कोशिश करूंगा कि क्या यह संबंधित है।
चंद्र

जवाबों:


4

टी एल; डॉ

सुनिश्चित करें कि प्रथम-पक्ष के संदर्भ में डोमेन के लिए एक कुकी पहले ही सेट की जा चुकी है।


उस कोड नमूने के साथ बाहर देखने के लिए कुछ चीजें हैं। कृपया ध्यान दें कि सफारी 13.1 पर परीक्षण किया गया था।

उपयोगकर्ता प्रॉम्प्ट की शर्तें, और बाद में पहुंच अनुदान:

  1. document.requestStorageAccessएक उपयोगकर्ता कार्रवाई के परिणामस्वरूप बुलाया जाना है। एमडीएन डॉक्स पर प्रलेखित होने के बावजूद , document.hasStorageAccessउपयोगकर्ता कार्रवाई का प्रचार नहीं करता है।
  2. उपयोगकर्ता ने पहले से ही पार्टी के संदर्भ में तीसरे पक्ष के साथ बातचीत की होगी। दस्तावेज़ पर कोई भी क्लिक करेगा।

कुकी लिखने में सक्षम होने की शर्तें:

प्रथम पक्ष के संदर्भ में एक कुकी पहले ही डोमेन पर सेट हो गई होगी। इस कुकी को सर्वर द्वारा प्रतिक्रिया हेडर के रूप में सेट किया जा सकता है, या JS द्वारा document.cookie का उपयोग किया जा सकता है। आगे के परीक्षण के साथ, ऐसा लगता है कि यह कुकी आवश्यक रूप से तृतीय पक्ष के संदर्भ में सेट की जाने वाली कुकी के लिए डोमेन ध्वज के साथ सेट नहीं होनी चाहिए। इसका मतलब है कि वास्तव में, मौजूदा कुकी को भी उसी सटीक उप डोमेन पर सेट किया जाना चाहिए।


कुकीज़ इन स्थितियों को ध्यान में रखते हुए काम करती हैं। लेकिन ऐसा लगता है कि आपको हर बार पहुंच का अनुरोध करना पड़ता है, इसलिए हम अभी के लिए इसे अनुपयोगी पाते हैं। शायद हम अभी भी कुछ और गलत कर रहे थे। किसी भी मामले में, हम इसे अलग तरीके से करने का निर्णय लेते हैं। धन्यवाद।
lunr

@ क्या आप परिणाम साझा कर सकते हैं?
सर्गेई कोरज़ोव

@ कहीं मेरा भी यही मुद्दा तो नहीं है। क्या कोई तरीका है जिससे हम कुकीज़ को सेट कर सकते हैं या IFrame में नहीं।
MikBTC
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.