Facebook Iframe App avec plusieurs pages dans Safari Variables de Session pas la persistance de
J'ai un facebook Iframe application avec plusieurs pages PHP en elle.
J'ai quelques liens qui pointent relativement aux fichiers à l'intérieur de mon "iframe" dossier".
Avoir quelques problèmes avec les variables de session à l'intérieur de l'iframe. J'ai mis quelques variables de session, mais ils ne persistent pas d'une page à l'autre.
Cela fonctionne sur les autres navigateurs.
J'ai lu que Safari ne supporte pas la Croix-Domaine de cookies, ce qui pourrait être le problème , mais je ne sais pas comment résoudre ce problème.
Toute aide?
- Avez-vous trouvez une solution?
Vous devez vous connecter pour publier un commentaire.
J'ai écrit le blog Dominic se réfère à sa réponse.
Le problème est que le comportement par défaut de Safari est de n'accepter que les cookies des sites que vous visitez. Ce qui exclut les "tiers" des cookies. Safari traite de la page dans un IFRAME comme un site tiers, et jusqu'à ce que vous interagir avec ce contenu (en cliquant sur un lien, par exemple), il refuse les cookies.
Votre code PHP doit mettre en place un cookie sur la première page qui utilise la session pour la session de persister à partir d'une page à l'autre, mais si les variables de session sont dans la toute première page dans l'IFRAME, vous avez un dilemme de la poule et de l'oeuf problème.
Ma solution est de conserver tous les spécial Facebook paramètres grâce à la deuxième page chargée dans l'IFRAME. Parce que vous avez interagi avec elle, des cookies placés sur la deuxième page persisteront, et cela permet à votre code PHP pour garder quel que soit son état, il doit communiquer avec Facebook.
Ce ne seront pas susceptibles d'aider votre session PHP, si, si je vous suggère d'ajouter un autre paramètre de liens sur la première page qui permet à la deuxième page pour rechercher la séance, ou au contraire de le recréer.
Je crois que cette solution est devenue obsolète avec la dernière version (6.0 et versions ultérieures) versions de Safari.
Safari par défaut ne permet pas de cookies de tierces parties. Cela affecte Facebook iframe parce que l'utilisateur accède à une page servi de
apps.facebook.com
mais l'iframe est servi à partir deyourdomain.com
, les "tiers" dans ce cas.Il y a plusieurs solutions mentionnées sur le web. La meilleure que j'ai trouvé et celui recommandé par Facebook dans sa liste de questions diverses est pour de faux une requête POST à
yourdomain.com
à l'aide de JQuery. Cette solution détaillée par Anant Garg travaille en général pour les différents hôte/iframe domaines et doit être adapté à Facebook apps. Les éléments clés sont:Une autre solution par Va Henderson est l'instrument de chaque lien sur votre page avec les informations de session à l'aide d'une fonction Javascript. Modifiez ensuite votre code serveur pour la saisie de cette session d'information par la lecture de paramètres GET.
Je pense que la meilleure solution est d'assurer le suivi manuel de l'ID de session, c'est à dire en utilisant
session_id($_GET['session]);
assurez-vous de le faire avant d'appelersession_start();
et tout fonctionne.Safari accepte les cookies uniquement à partir de la page que l'utilisateur accède à l'. La méthode la plus simple et la plus efficace pour résoudre ce problème est de rediriger la demande à partir de la page de destination de votre toile application à une autre page sur votre nom de domaine à l'aide de
top.location.href
et rediriger l'utilisateur vers la toile application à partir de cette page.Par exemple, si abc.php votre page de destination et de la toile URL facebook.com/abc. Première rediriger la demande de abc.php à une autre page comme xyz.php ensuite rediriger à nouveau à partir de xyz.php pour facebook.com/abc. N'oubliez pas de commencer la session en xyz.php.
C'est la seule solution...
et merci pour tous les commentaires. J'ai fini par résoudre le problème en ajoutant le "signed_request" paramètre sur chaque page. Je viens de le mettre dans un champ caché et de le fixer dans le code derrière. De cette façon, j'ai réussi à le faire fonctionner dans Safari. Espérons que cela fonctionne pour vous aussi.
Si vous aide .NET puis il y a une solution beaucoup plus simple à ce problème.
Juste mis cookieless à false dans votre site web.config. Ex:
Son beaucoup plus facile que de poster un iframe, ou de l'ouverture d'une fenêtre pop-up avec l'url de l'iframe.
salutations,
David
Avec la sortie de Safari 7, non seulement 3rd Party cookies est bloqué. Local de Stockage ainsi que WebDB, tout type de site, les données sont bloqués. Quand vous allez dans les Préférences de Safari (CMD+virgule), Sous l'onglet confidentialité, sur Safari 7, il dit maintenant : "Bloquer les cookies et d'autres site web", était à l'origine "Bloquer les cookies". Ce qui confirme les changements.
D'autres navigateurs peuvent suivre dans l'avenir. Plus probablement Firefox. Chrome, toux *tousse* probablement pas.
Vous avez probablement d'utiliser une solution de contournement à l'aide de la redirection de la technique ou de la popup similaire à ce que disqus n'.
J'ai utilisé cet en-tête avec PHP, que résoudre mes problèmes