【问题标题】:The session is invalid because the user logged out会话无效,因为用户已注销
【发布时间】:2012-03-14 18:43:30
【问题描述】:
我这里有一个情况,我还在想如何解决它。
场景如下:
用户访问我的网站
用户点击登录 FB(以便我的应用通过 Api 图检索他的 FB 信息)。
用户使用其 FB 凭据登录并批准应用程序。
用户被重定向回他单击登录 FB 按钮的同一页面(在步骤 2 中,因为该按钮将调用方法 RedirectToFacebookAuthorization() )。
然后用户从 Facebook.com 注销(我的网站没有针对这种情况实现任何注销按钮)。
用户已成功退出其 FB 帐户,他重新访问了我的网站。
我的网站抛出异常消息如下:
异常详细信息:Facebook.Utility.FacebookException:会话无效,因为用户已注销。
【问题讨论】:
标签:
c#
javascript
.net
facebook
api
【解决方案1】:
如果你有一个异常,并且你知道它为什么被抛出。唯一的方法是在您的代码中处理它,同时在您的站点中注销用户。
尝试搜索检查此错误的一些变体,例如this:
if(ex.Message == "The session is invalid because the user logged out")
{
//timeout caused by user logging out of FB (auth token remains in qstring)
Session.Remove("Facebook_session_key");
Session.Remove("Facebook_userId");
Session.Remove("Facebook_session_expires");
//redirect to login
Response.Redirect(@"http://www.Facebook.com/login.php?api_key=" + fbService.ApplicationKey + @"&v=1.0\");
}
您还应该检查exception 的ErrorType 属性:
/// <summary>
/// A value representing the specific type of error returned by Facebook.
/// </summary>
public enum ErrorType
{
///<summary>
///</summary>
Unknown = 1,
///<summary>
///</summary>
ServiceUnavailable = 2,
///<summary>
///</summary>
RequestLimit = 4,
///<summary>
///</summary>
Timeout = 102,
///<summary>
///</summary>
Signing = 104,
///<summary>
///</summary>
InvalidUser = 110,
///<summary>
///</summary>
InvalidAlbum = 120,
///<summary>
///</summary>
UserNotVisible = 210,
///<summary>
///</summary>
AlbumNotVisible = 220,
///<summary>
///</summary>
PhotoNotVIsible = 221,
///<summary>
///</summary>
InvaldFQLSyntax = 601
}