0

我有一个 ASP.NET MVC 3 网站,它既可以从特定的公共 url 获得,也可以作为 Facebook 应用程序使用。

在我的网站逻辑中,在某些地方我必须确定当前请求是来自 Facebook-app 还是来自公共网站,因为我想根据这个环境显示内容。

所以,例如。如果用户将我的网站用作 facebook 应用程序,那么我想显示图片,如果用户正常使用我的网站,那么我不想显示图片。

为了确定我是否来自 Facebook 应用程序,我检查了 HttpContext.Request 中的“signed_request”,并将其存储在 HttpSession 中以供我的其他操作使用,而不仅仅是为我定义的那个操作 (url)脸书应用程序。

因此,当执行子操作时,我可以根据 Session 确定该网站是否用作 FB 应用程序。

问题发生了,当会话超时时,因为虽然逻辑仍在 Facebook 内部运行,但我的逻辑认为它不在 Facebook 内部。

有什么建议吗?

4

2 回答 2

0

如果您不想要它,您可以将来自 signed_request 的重要信息存储在 cookie 中,该信息在浏览器关闭时过期。会话不够可靠,无法存储此内容。

我认为你的方法可能是错误的。如果用户在 Facebook 和单独的 url 上输入您的应用程序怎么办?Facebook 有 Javascript API,如果用户连接到网站,它会放置 cookie。如果用户已连接,您应该显示 Facebook 相关内容,无论这是画布应用程序还是单独页面都无关紧要。特别是如果它使用相同的视图。如果视图不一样,只有 url,你应该有单独的画布应用程序的 url。

最后一个解决方案,但可怕的是检查 Javascript 是否页面在 iframe 中运行,如果它在 iframe 中运行并且 signed_request 不存在,则重新加载 top.location。

于 2012-04-13T12:09:29.713 回答
0

您可以定期从 FB-App 联系服务器吗?如果用户有一段时间没有采取任何行动,也许你可以从中“ping”

于 2012-04-13T11:56:23.127 回答