18

SafariはデフォルトでFrom third parties and advertisersBlock cookiesセットを持っています。ブロックサードパーティのCookie - 回避策(Facebookアプリなど)は、Mac上の

埋め込みswfが別のドメインのものであれば、SharedObjectが機能しなくなります。

この問題は新しいものではありません。 Safari 3rd party cookie iframe trick no longer working?

は(他は、各リクエストでGET/POST paramsはを通じてセッションIDを渡して)誰もが解決策を見つけていますか?

注: 私はswfファイルを埋め込むしているサイトへのアクセス何を持っていないので、そのHTMLを変更するか、任意のJavaScriptを配置する方法がない、など

答えて

1

私は非常に最近の経験から言うことができますこれはMac上のSafariでの問題ではなく、これを問題として経験したこともありません。あなたが設定を述べた

は、サードパーティからのクッキーをブロックしている:SharedObjectのストレージは、第三者からなることはありません、それはあなたが訪問しているサイトからです(第一党を?)。だから私はそれが今までの問題だとは思わない。 Flash Playerの設定パネルを使用して

、ユーザーがSharedObjectを無効にする(またはストレージ・スペースの量を制限する)ことができます。だから一般的に、あなたのアプリは、SharedObjectが利用できない場合を処理する必要があります。

しかし、ほとんどのユーザーはSharedObjectを認識しておらず、無効にできると思います。

+0

私は、サードパーティのCookie(Win7 Safari)をブロックするように設定しただけで、SharedObjectは正常に動作しません。私はいくつかの痕跡を取得し、すぐにこの記事を更新します。 –

+0

興味深い...その設定はデフォルトではありませんが、正しいのですか?また、共有オブジェクトへのアクセスをブロックする別のものは、「プライベート」または「シークレット」ブラウジング(ブラウザーがその特定のセッションでのみクッキーを保持する)です。 Chromeにはこれを行うオプションがあります。 –

+1

私は自分のブラウザ(Safari 5.1.7、Mac)でこれをチェックしているはずです。Preferencesで、Privacyタブの "Cookieをブロックする"設定は、 "サードパーティと広告主からの" Cookieをブロックするように設定されています。これはデフォルト値です(私はそれを変更したとは思わない)。しかし、私の場合、SharedObjectへのアクセスはサードパーティのCookieをブロックするときにうまく動作します。 –

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 

出典:サファリ6.

まで働いて、この問題を修正するhttp://www.reizbombardement.de/archives/safari-5-1-4-enforces-cookie-policy

// UPDATE 2013年7月23日

この安っぽい方法@Fabioアントゥネスを参照してくださいし、 @ncubicaは以下のようにコメントしています。ファビオ・アントゥネスによって

// UPDATE 2013年7月23日

ここでは、ランディングページでは私のコード

は、私たちがアプリと「入力」のような何かを言っボタンについての簡単な説明があるでしょうです。私はこのプロセスを単純化するためにjqueryを使用して、クリックイベントのリスナーを作成しています。ランディングページのHTMLコードの残りの部分を既に持っていると仮定しているので、javascriptコードを入れます:

これは、画面中央に500 x 250ピクセルの小さなウィンドウを開きます。

小さなウィンドウのための私が持っているコードは、このです:

<?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_な方法です。 Safariにも「ポップアップウィンドウ」がブロックされているため、非常にうまく動作しません。 @Abadabaあなたがより良い解決策を見つけたら、分かち合いましょう。 FYI:Facebook Apps – wenbert

+1

ありがとう、私は私の同じ問題を取り除いた:) –

10

サファリはまだそれがトップウィンドウに訪問していないドメインからのCookieをブロックありません。

これを回避するには、PHPで($ _ COOKIES)を数えて、そのブラウザを私たちのドメイン上のページに送ります。その仕事は、ブラウザを元の場所に戻すだけです。これは、ユーザーが不必要に離れて戻ってくることを意味する汚いトリックですが、ウェブは汚いトリックでいっぱいです。

クッキーを設定する必要があるドメインのページにtop.location.hrefを設定できない場合、またはそのドメインのページを変更できない場合は、URLベースのセッションを使用する必要があると確信できます。

しかし、別のオプション(ドメインでページを作成する必要があります)では、ユーザーがSWFをクリックするように要求すると、window.openがトリガーされ、URLが作成したページを指し示すことができます。必要なのは正常に読み込まれるだけで、ユーザー(またはポップアップページ自体のJSでも)がポップアップを閉じることができます。その後、クッキーを設定することができます。


私はこの問題を抱えているiframeの中に住むFacebookアプリケーションを開発しています。すべてのアプリをこのフィックスで出荷する必要があります。

+0

あなたは同じことを説明してもらえますか?しかし、JavaのFacebookのゲームアプリケーションの回避策について教えてください。 – maximus

0

だけsafari.xxxページのクリーナーのsetTimeoutのない道であり、またはjqueryのを追加します。最新のios(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

私はこのように解決しましたが、server2でセッション変数を保持するとアプリケーションのスケーラビリティが向上しないため、HTML5 localstorageを使用して安心してWebサービスを作成する方がよいでしょう。 ここでは、サードパーティのCookieの問題を解決するために使用したコードを示します。基本的にserver1のゲストはまずserver2に行き、「コイン:D」を取って突然server1に戻ります。このように、server2のセッション変数はすべてのナビゲーションで使用できます。 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); 
?> 

P.S. window.openは一種のポップアップのように見えるので、広告ブロッカーやブラウザーの設定に問題があるかもしれません。