Soru üçüncü taraf çerezlerini engelleme - geçici çözüm (facebook uygulamaları vb.)


Mac’te Safari’nin Block cookies ayarlanır From third parties and advertisers varsayılan olarak.

Gömülü swf farklı bir etki alanından ise SharedObject çalışmasını durdurur.

Bu sorun yeni değil: Safari 3. parti çerez iframe hile artık çalışmıyor?

Birisi herhangi bir çözüm bulmuş mu (başka biri de her bir istekte GET / POST paramları yoluyla Oturum Kimliği'ni geçiyor)? 

NOT: SWF'yi gömdüğü siteye erişimim yok, bu yüzden bu HTML'yi değiştirmenin veya herhangi bir JavaScript'in vb.


18
2017-07-24 16:17


Menşei




Cevaplar:


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

Kaynak: http://www.reizbombardement.de/archives/safari-5-1-4-enforces-cookie-policy

// 23 GÜN 2013 TARİHİ

Bu sorunu düzeltmenin bu berbat yolu Safari 6'ya kadar çalışırdı.

Aşağıda @Fabio Antunes ve @ncubica yorumlarına bakınız.

// 23 Temmuz 2013 tarihinde Fabio Antunes tarafından güncellenmiştir.

İşte kodum

Açılış sayfasında, uygulama hakkında kısa bir açıklama ve "giriş" gibi bir şey söyleyen bir düğme göreceğiz. Bu işlemi basitleştirmek için jquery'yi kullanıyorum, tıklama olayı için bir dinleyici oluşturacağım, javascript kodunu koyacağım, çünkü zaten açılış sayfası için html kodunun geri kalanını kullandığınızı varsayalım:

$(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);
});

Bu, ekranınızda ortalanmış 500 x 250 piksel ile küçük bir pencere açacaksınız.

Küçük pencere için sahip olduğum kod şu:

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

12
2017-07-25 02:23



Bu tetikleyici pop-up engelleyici değil, çünkü kullanıcı bunu başlatmak için tıklamadı? Buna ek olarak, içinde hiçbir şeye sahip olmayan yeni bir pencere açıyorsunuz, bana göre bu kabul edilebilir bir üretim çözümü değil. - Abadaba
Şu anda bu bir tek İşleri güvenilir bir şekilde yapabilmem için. Çok kötü bir çalışma ortamı çünkü Safari'de "pop-up pencereler" de engellendi. @Abadaba daha iyi bir çözümle karşılaşırsanız lütfen paylaşın. FYI: Facebook Uygulamaları - wenbert
Teşekkürler, aynı sorunumdan kurtuldum :) - Vardan Gupta
Mac üzerinde Safari 6.0.5 için hala sorun devam ediyor, nasıl başa çıkabiliriz? - Vardan Gupta
Bu küçük engelden kaçınmak için kullandığım yolu kısaca açıklayan bir kod ekledim - Fabio Antunes


Safari hala üst pencerede ziyaret etmediği alan adlarındaki çerezleri engelliyor.

Bu sorunu çözmek için, PHP'de ($ _ COOKIES) sayıyoruz ve tarayıcıyı, tarayıcımızın işini geldiği yere geri göndermesi gereken alanımızdaki bir sayfaya yönlendiriyoruz. Bazı kullanıcılar gereksiz yere uzaklaşıp sonra geri dönecekleri kirli bir oyun, ama sonra web, kirli hilelerle dolu.

Eğer ayarlayamazsan top.location.href Çerezleri ayarlaması gereken alandaki bir sayfaya veya söz konusu alandaki bir sayfayı değiştiremezsiniz. Daha sonra, URL tabanlı oturumları kullanmanız gerektiğini güvenle söyleyebilirim.

Ancak, alternatif bir seçenek (etki alanında bir sayfa oluşturabilmek için gerekli olan), kullanıcının SWF'nizi tıklamasını istemektir, daha sonra tetikleyebilirsiniz window.open URL’yi oluşturduğunuz sayfaya yönlendirin. Tüm yapması gereken, başarıyla yüklenen, daha sonra kullanıcı (veya pop-up sayfada kendisi JS) pop-up'ı kapatabilir. Daha sonra çerezleri ayarlayabilirsiniz.


Bu sorunu yaşayan iframe'lerin içinde yaşayan Facebook uygulamaları geliştiriyorum. Her bir uygulama bu düzeltmeyle gönderilmelidir.


10
2017-07-16 15:35



Aynı şeyi açıklayabilir misiniz, ama java facebook oyun uygulama çözümü için mi? - maximus


Son zamanlardaki deneyimlerinden, bunun Mac’te Safari ile ilgili bir sorun olmadığını ve bunu bir problem olarak deneyimlemediğimi söyleyebilirim.

Ayarın üçüncü tarafların çerezlerini engellemesinden bahsettiniz: SharedObject depolama alanı asla üçüncü taraflardan değil, ziyaret ettiğiniz siteden (1. taraf?). Yani bunun bir sorun olacağını düşünmüyorum.

Flash Player ayarları panelini kullanarak, kullanıcı SharedObject (veya depolama alanı miktarını sınırlayın). Genel olarak, uygulamanızın SharedObjectmevcut değil.

Ancak, çoğu kullanıcının SharedObject ve bunu devre dışı bırakabilirler.


1
2017-07-24 16:29



Üçüncü taraf çerezlerini engelle (Win7 Safari) ayarını ayarladım ve SharedObject olması gerektiği gibi çalışmıyor. Bazı izler bulacağım ve bu yazıyı yakında güncelleyeceğim. - san.chez
İlginç ... Bu ayar varsayılan değil, değil mi? Ayrıca, paylaşılan nesneye erişimi engelleyecek başka bir şey "özel" veya "gizli" taramadır (tarayıcının çerezleri yalnızca söz konusu oturum için tuttuğu yer). Chrome'un bunu yapmak için bir seçeneği var. - Sunil D.
Bunu kendi tarayıcımda kontrol etmeliydim (Safari 5.1.7, Mac): Tercihler bölümünde, Gizlilik sekmesinde, "Çerezleri engelle" ayarı "üçüncü taraflardan ve reklamverenlerden" çerezleri engelleyecek şekilde ayarlanmıştır. Bu varsayılan değer (hiç değiştirmedim sanmıyorum). Ama benim durumumda, SharedObject'e erişim üçüncü taraf çerezlerini engellerken gayet iyi çalışıyor. - Sunil D.
Evet, soruyu / konuyu düzenlemek kötü bir fikir değildir. Alternatif fikriniz gibi (çerezleri kullanarak verileri devam ettirmek) işe yaramadı. Akla gelen diğer seçenekler, verileri sunucuda devam ettirmek, ya da koddaki sorunu tespit etmek ve kullanıcıya verilerin kaydedilememesini sağlamaktır. - Sunil D.


SWF'nin düzgün çalışması için bir etki alanları arası ilke dosyası kullanmanız gerekebilir.

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


1
2017-07-22 20:41





Bu şekilde çözdüm, ancak sunucudaki oturum değişkenlerini tuttuğunuzdan, uygulamanızı iyi ölçeklendirilemediğinden HTML5 localstorage kullanmak ve web servislerini rahatlatmak daha iyidir. Burada 3. taraf çerez problemini çözmek için kullandığım kod. Temelde server1'in misafirleri önce "the coin: D" yi almak için server2'ye gider ve aniden server1'e geri döner. Bu şekilde, server2'nin oturum değişkenleri tüm navigasyonlarda kullanılabilir. www.yourserver.com/index.html sayfa

<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);
?>

Not; window.open bir tür açılır pencere gibi göründüğünden, reklam engelleyicileri veya tarayıcı ayarlarıyla ilgili sorun yaşayabilirsiniz.


1
2018-01-10 21:26





Sadece setTimeout ve / veya safari.xxx sayfası için jquery olmadan daha temiz bir yol eklemek için. Son ios (8.1.2) ile iyi çalışıyor, 8.1.0 için biliyorum pencerenin / sekmenin kapanmayacağı bir hata vardı.

İşte kod:

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

Kullanıcıdan bir tıklama ile başlatıldığından pop-up benim durumumda bir sorun değil.


0
2017-12-29 04:14