68 votes

Réglage de la croix-domaine cookies dans Safari

Evernote's bookmarklet est capable de faire cela, donc la plupart des upvoted réponse ne répond pas à cela, même si la prime sera d'y aller (non-productive).

Je dois les appeler de domaine A.com (qui définit les cookies avec http) de domaine B.com. Tout ce que je fais sur le domaine B.com est (javascript):

var head = document.getElementsByTagName("head")[0];
var script = document.createElement("script");
script.src = "A.com/setCookie?cache=1231213123";
head.appendChild(script);

Cela définit le cookie sur A.com sur tous les navigateurs que j'ai testé, à l'exception de Safari. Étonnamment, cela fonctionne dans IE6, même sans le P3P en-têtes.

Est-il possible de faire ce travail dans Safari?

64voto

Paolo Bergantino Points 199336

De la Safari Developer FAQ:

Safari est livré avec une prudente politique de cookie qui limite cookie écrit uniquement les pages choisies ("navigué") par l'utilisateur. Ce défaut de la politique conservatrice peut confondre l'image en fonction des sites qui tentent d'écrire des cookies et d'échec.

Je n'ai trouvé aucun moyen de contourner ce problème.

Si ça en vaut la peine, Chrome ne définissez pas les cookies ou si vous utilisez l' <script> ajout de la méthode, mais si vous avez un caché <img> avec la même source, Chrome fonctionne en outre pour le reste des navigateurs (sauf, encore une fois, Safari)

14voto

Alec Smart Points 14075

4voto

Kent Fredric Points 35592

Il y a un peu de mal de truc en supposant qu'ils ont installé flash.

Je ne sais pas si elle fonctionne encore ou pas, mais le Flash es "Local Shared Objects" aka les Cookies Flash pourrait vous aider à faire le tour de Safari est de même des stratégies de domaine.

Objet Partagé Local Tutoriel

Toutefois, il peut être compliqué à mettre en œuvre, pour dire le moins.

Additonally, LSO sont à venir dans la lumière comme étant une sécurité cauchemar:

Donc réfléchissez bien avant de les utiliser.

3voto

daaku Points 2279

Un poste à un caché <iframe> peut vous permettre de contourner cette restriction en Safari -- http://gist.github.com/586182:

<?php
  header('P3P: CP=HONK');
  setcookie('test_cookie', '1', 0, '/');
?>
<div id="test_cookie" style="position: absolute; top: -10000px"></div>
<script>
  window.setTimeout(function() {
    if (document.cookie.indexOf('test_cookie=1') < 0) {
      var      
        name = 'test_cookie',
        div = document.getElementById(name),
        iframe = document.createElement('iframe'),
        form = document.createElement('form');

      iframe.name = name;
      iframe.src = 'javascript:false';
      div.appendChild(iframe);

      form.action = location.toString();
      form.method = 'POST';
      form.target = name;
      div.appendChild(form);

      form.submit();
    }
  }, 10);
</script>

2voto

ADOConnection Points 228

Je sais que cette question est un peu vieux, mais cela m'a aidé à résoudre des cookies problème:

var cookieForm = document.createElement("form");
cookieForm.action = "A.com/setCookie?cache=1231213123";
cookieForm.method = "post";
document.body.appendChild(cookieForm);

cookieForm.submit();

L'idée de faire un post de formulaire sur une page qui définit vos cookies.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X