キャンバスで実行される Facebook アプリを開発しています。これがシナリオです(非常に一般的だと思います)。これはすべてサーバー側の実装です。
であること:
APP_URL: https://apps.facebook.com/xxxxxx/
CANVAS_URL: https://myexample.com/facebookApp/
ステップ 1 (アプリのインデックス) にはフォームがあります。あります
action="CANVAS_URL/step2"(アプリの URL ではないことに注意してください)。次のステップで使用するためにsigned_request、隠しフィールドがあります<input type="hidden" name="signed_request" value="<?php echo $_POST['signed_request'] ?>" />ステップ 2 : フォームの情報を受け取り、それを に格納してから
Session、signed_request を解析します。これは正常に動作します。ユーザーが認証された後にデータベースに保存したいので、セッションに保存します。ユーザーがアプリにログオンしていた場合、私は彼をにリダイレクトしAPP_URL/step3ます。そうでない場合は、彼をログイン ダイアログにリダイレクトします&redirect_uri=APP_URL/step3。APP_URL/step3どちらの場合も、ステップ 3 は(signed_requestユーザーが認証されているかどうかと別のデータを再度確認する必要があるため) であることに注意してください。すべてのリダイレクトは JavaScript で行われます。<script type="text/javascript">window.top.location = "URL";</script>ステップ 3 : 以前にセッションに保存されたデータを保存したいと思います。しかし、ユーザーが FB キャンバスをナビゲートしているため、セッション データは利用できません。
いくつかの組み合わせを試しました。フォームが に送信された場合APP_URL/step2( の代わりにCANVAS_URL/step2のセッションを作成するためAPP_URL)、投稿されたデータを取得できません ( ではなく FB に送信されるためCANVAS_URL)。
session_idを使用して でセッションを再作成することを考えましたAPP_URLが、残念ながら、それはあまり安全な方法ではありません。より良い回避策があるに違いないと確信しています。