18

सफारी पर एक मैक डिफ़ॉल्ट रूप से From third parties and advertisers करने के लिए एक Block cookies सेट है।ब्लॉक तृतीय पक्ष कुकी - वैकल्पिक हल (फेसबुक क्षुधा आदि)

यह काम करने से SharedObject बंद हो जाता है, तो एम्बेडेड swf किसी भिन्न डोमेन से है।

यह समस्या नई नहीं है: Safari 3rd party cookie iframe trick no longer working?

किसी को भी एक समाधान (अन्य तो प्रत्येक अनुरोध में प्राप्त/पोस्ट पैरामीटर के माध्यम से सत्र आईडी गुजर) पाया गया है?

नोट: मैं साइट है, जो swf embedding है करने के लिए कोई उपयोग कर सकते है, इसलिए वहाँ है कि HTML को बदलने के लिए या डाल करने के लिए किसी भी जावास्क्रिप्ट कोई रास्ता नहीं, आदि है

उत्तर

1

मैं बहुत हाल के अनुभव से कह सकता हूँ कि यह मैक पर सफारी के साथ कोई समस्या नहीं है, और न ही मैंने इसे किसी समस्या के रूप में अनुभव किया है।

आप सेटिंग 3 पार्टियों से कुकीज़ ब्लॉक कर रहा है उल्लेख: (? 1 पार्टी) SharedObject भंडारण यह पर आप जाते हैं से है, किसी तीसरे पक्ष से कभी नहीं है। तो मुझे नहीं लगता कि यह कभी भी एक मुद्दा होगा।

फ़्लैश प्लेयर सेटिंग्स पैनल का उपयोग करना, उपयोगकर्ता को निष्क्रिय कर सकते SharedObject (या भंडारण स्थान की मात्रा को सीमित)। तो सामान्य रूप से, आपके ऐप को उस मामले को संभालना चाहिए जहां SharedObject उपलब्ध नहीं है।

हालांकि, मुझे लगता है कि अधिकांश उपयोगकर्ता SharedObject से अवगत नहीं हैं और वे इसे अक्षम कर सकते हैं।

+0

मैंने अभी थर्ड पार्टी कुकीज़ (Win7 सफारी) को अवरोधित करने के लिए सेटिंग सेट की है और साझा ऑब्जेक्ट काम नहीं कर रहा है जैसा कि करना चाहिए। मुझे कुछ निशान मिलेगा और जल्द ही इस पोस्ट को अपडेट करेंगे। –

+0

दिलचस्प ... यह सेटिंग डिफ़ॉल्ट नहीं है, यद्यपि सही है? साथ ही, साझा की गई वस्तु तक पहुंच को अवरुद्ध करने वाली एक और चीज "निजी" या "गुप्त" ब्राउज़िंग है (जहां ब्राउज़र केवल उस विशेष सत्र के लिए कुकीज़ रखता है)। क्रोम के पास ऐसा करने का विकल्प है। –

+1

मुझे इसे अपने ब्राउज़र (सफारी 5.1.7, मैक) में जांचना चाहिए था: प्राथमिकता में, गोपनीयता टैब पर, "ब्लॉक कुकीज़" सेटिंग कुकीज को "तृतीय पक्षों और विज्ञापनदाताओं से" ब्लॉक करने के लिए सेट की गई है। यह डिफ़ॉल्ट मान है (मुझे नहीं लगता कि मैंने इसे कभी बदल दिया है)। लेकिन मेरे मामले में, ShareObject तक पहुंचने से तीसरे पक्ष की कुकीज़ को अवरुद्ध करते समय ठीक काम करता है। –

12
function setCookie(){ 
    if (navigator.userAgent.indexOf('Safari') != -1 && 
     navigator.userAgent.indexOf('Chrome') == -1){ 
     window.open('safari.php','','width=200,height=100'); 
    } 
} 

// then we set the cookie in safari.php 

स्रोत: http://www.reizbombardement.de/archives/safari-5-1-4-enforces-cookie-policy

// अपडेट 23 जुलाई 2013

सफारी 6. जब तक काम करने के लिए

कृपया देखें @Fabio Antunes इस्तेमाल किया इस समस्या का समाधान का यह भद्दा तरीका है और नीचे @ncubica टिप्पणियां।

// अपडेट 23 जुलाई 2013 फैबियो Antunes द्वारा

यहाँ मेरी कोड

लैंडिंग पृष्ठ पर है हम एप्लिकेशन और एक बटन "प्रवेश" जैसे कुछ कह रही है के बारे में एक संक्षिप्त विवरण होगा। मैं इस प्रक्रिया को सरल बनाने के लिए jquery का उपयोग कर रहा हूं, क्लिक ईवेंट के लिए श्रोता बना रहा हूं, मैं केवल जावास्क्रिप्ट कोड डालूंगा, क्योंकि मुझे लगता है कि आपके पास लैंडिंग पृष्ठ के लिए पहले से ही शेष HTML कोड है:

$(document).on("click", "#bt-landing", function(){ 
var left = (screen.width/2)-(500/2); 
      var top = (screen.height/2)-(250/2); 
      window.open('URL_FOR_THE_PHP_THAT_WILL_CREATE_THE_SESSION', '_blank', 'width=500,height=250,toolbar=0,location=0,menubar=0, top='+top+', left='+left); 
}); 

यह आपको 250 पिक्सल, अपनी स्क्रीन पर केंद्रित द्वारा 500 के साथ एक छोटी सी खिड़की खोलते हैं, करेंगे।

<?php setcookie("safari_cookie", "1");?> 
    <html> 
     <head> 
      <meta charset="utf-8"> 
      <title>THE NAME OF YOUR APP OR SOMETHING THAT THE USER WE'LL READ AND ASSUME THAT THIS SMALL WINDOW IS RELIABLE</title> 
     </head> 
     <body> 
     <script type="text/javascript"> 
     $(document).ready(function(){ 
      setTimeout(function(){window.close()},1000); 
     }) 
     </script> 
     </body> 
    </html 
+1

क्या यह पॉपअप अवरोधक को ट्रिगर नहीं करेगा क्योंकि उपयोगकर्ता ने इसे शुरू करने के लिए क्लिक नहीं किया है? इसके अलावा आप एक नई खिड़की खोल रहे हैं जिसमें इसमें कुछ भी नहीं होगा, मेरे लिए यह एक स्वीकार्य उत्पादन समाधान नहीं लगता है। – Abadaba

+1

वर्तमान में, यह _only_ तरीका है जिससे मैं चीजों को विश्वसनीय रूप से काम कर सकता हूं। बहुत खराब काम-आसपास क्योंकि सफारी में "पॉप-अप विंडो" भी अवरुद्ध है। @Abadaba यदि आप एक बेहतर समाधान में आते हैं, तो कृपया साझा करें। एफवाईआई: फेसबुक ऐप – wenbert

+1

धन्यवाद, मैंने अपनी समस्या से छुटकारा पा लिया :) –

10

सफारी अभी भी डोमेन जो यह शीर्ष विंडो में दौरा नहीं किया है से कुकी ब्लॉक करता है:

कोड मैं छोटी सी खिड़की के लिए है यह है।

इसे हल करने के लिए, हम PHP में ($ _ कुकीज) गिनते हैं और ब्राउज़र को हमारे डोमेन पर एक पृष्ठ पर निर्देशित करते हैं जिसका काम ब्राउज़र को वापस कहां से भेजना है। यह एक गंदे चाल है जिसका अर्थ है कि कुछ उपयोगकर्ता अनावश्यक रूप से दूर चले जाएंगे और फिर वापस आ जाएंगे, लेकिन फिर, वेब गंदे चाल से भरा होगा।

यदि आप कुकीज़ पर सेट करने की आवश्यकता वाले डोमेन पर top.location.href सेट नहीं कर सकते हैं, या आप कहा गया डोमेन पर कोई पृष्ठ नहीं बदल सकते हैं, तो मैं आश्वस्त रूप से कह सकता हूं कि आपको यूआरएल-आधारित सत्रों का उपयोग करने की आवश्यकता होगी।

हालांकि, एक वैकल्पिक विकल्प (जो अभी भी डोमेन पर एक पृष्ठ बनाने में सक्षम होने की आवश्यकता है) अनुरोध है कि उपयोगकर्ता आपके एसडब्ल्यूएफ पर क्लिक करे, फिर आप window.open को ट्रिगर कर सकते हैं और यूआरएल आपके द्वारा बनाए गए पेज पर इंगित कर सकते हैं। इसे करने की ज़रूरत है कि सफलतापूर्वक लोड हो, फिर उपयोगकर्ता (या पॉपअप पेज पर भी जेएस) पॉपअप को बंद कर सकता है। फिर आप कुकीज़ सेट कर सकते हैं।


मैं फेसबुक क्षुधा, जो अंदर आई, जो इस समस्या से पीड़ित रहते हैं विकसित करना। प्रत्येक फिक्स को इस फिक्स के साथ भेजना होगा।

+0

क्या आप इसे समझा सकते हैं लेकिन जावा फेसबुक गेम एप्लिकेशन वर्कअराउंड के लिए? – maximus

1

आपको SWF के लिए सही तरीके से काम करने के लिए क्रॉस-डोमेन नीति फ़ाइल का उपयोग करने की आवश्यकता हो सकती है।

http://kb2.adobe.com/cps/142/tn_14213.html

0

बस safari.xxx पेज के लिए setTimeout और या jQuery के बिना एक क्लीनर तरीका जोड़ने के लिए। नवीनतम आईओएस (8.1.2) के साथ ठीक काम करता है, मुझे 8.1.0 के लिए पता है कि एक बग था जहां खिड़की/टैब बंद नहीं होगा।

<% 
request.getSession(true); //or anyway to set the cookie depending on your language (jsp here) 
%> 

<script type="text/javascript"> 
    window.addEventListener("load", window.close); 
</script> 

पॉपअप मेरे मामले में एक मुद्दा है, क्योंकि यह एक क्लिक से उपयोगकर्ता से से शुरू होती है नहीं है:

यहाँ कोड है।

1

मैंने इस तरह से हल किया है, लेकिन एचटीएमएल 5 स्थानीय स्टोरेज का उपयोग करना बेहतर है और webservices को आराम से बनाते हैं क्योंकि सर्वर 2 में सत्र चर रखने से आपका एप्लिकेशन अच्छी तरह से स्केलेबल नहीं होता है। यहां कोड जो मैंने तृतीय पक्ष कुकी समस्या को हल करने के लिए उपयोग किया है। मूल रूप से सर्वर 1 के मेहमान "सिक्का: डी" लेने के लिए पहले सर्वर 2 पर जाते हैं और अचानक वह सर्वर 1 पर वापस आते हैं। इस तरह से सभी नेविगेशन में सर्वर 2 के सत्र चर उपलब्ध हैं। www.yourserver.com/index.html पेज

<script src="js/jquery.cookie.js" type="text/javascript"></script> 
<script src="js/mobile-detect.js" type="text/javascript"></script> 
<script> 
var md = new MobileDetect(window.navigator.userAgent); 
if (md.userAgent()=='Safari') { 
    var firstsafariuser = $.cookie('safari-user'); 
    if (firstsafariuser != 'true') { 
     $.cookie('safari-user', true); 
     location.href='http://www.yourserver2.com/coin.php?frompage=' 
     +location.href.replace(location.hash,"")+'&hashtags='+location.hash.substr(1); 
    } 
} 
</script> 

www.yourserver2.com/coin.php

<?php 
session_start(); 
if (isset($_GET["frompage"])&&$_GET["frompage"]!=null){ 
    $url=$_GET["frompage"]; 
} else { 
    $url='http://www.yourserver.com'; 
} 
if (isset($_GET["hashtags"])&&$_GET["hashtags"]!=null){ 
    $hash='#'.$_GET["hashtags"]; 
} else { 
    $hash=''; 
} 
header('Location:'.$url.$hash); 
?> 

पी.एस. window.open एक प्रकार की पॉपअप की तरह देखा जाता है ताकि आपको विज्ञापन-अवरोधक या ब्राउज़र सेटिंग्स में समस्या हो।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^