我正在开发一款将在画布上运行的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。这很好用。我将它存储在Session中,因为我想在用户通过身份验证后将其保存到数据库。如果用户已登录该应用,我会将其重定向到APP_URL/step3
;如果没有,我会使用&redirect_uri=APP_URL/step3
将其重定向到登录对话框。在这两种情况下,请注意步骤3是APP_URL/step3
(因为我需要signed_request
再次检查用户是否已经过身份验证和其他数据)。所有重定向均使用JavaScript:<script type="text/javascript">window.top.location = "URL";</script>
第3步:现在我想保存先前存储在Session中的数据。当用户在FB画布中导航时,但会话数据不可用。
我尝试了几种组合。如果表单发送到APP_URL/step2
(而不是CANVAS_URL/step2
,为了创建APP_URL
的会话),我无法检索发布的数据(因为它被发送到FB,不是CANVAS_URL
)。
我考虑过使用session_id
在APP_URL
中重新创建会话,但我担心这不是一种非常安全的方法。我确信必须有更好的解决方法。