Signed_request在ASP.NET会话中丢失,让我的网站感到困惑

时间:2012-04-13 11:24:33

标签: c# asp.net facebook session

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

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

所以,例如。如果用户使用我的网站作为facebook-app,那么我想显示图片,如果用户正常使用我的网站,那么我不想显示图片。

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

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

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

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

您可以定期从FB-App联系服务器吗?如果用户暂时不做任何动作,也许你可以“ping”它

答案 1 :(得分:0)

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

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

最后的解决方案,但可怕的是检查Javascript,如果页面在iframe中工作,如果是,并且signed_request不存在,请重新加载top.location。