2011-03-05 49 views
1

我正在使用Facebook在我的网站上对用户进行身份验证。我需要使用C#从服务器注销时删除Facebook cookie。你能告诉我怎么做吗?测试和工作示例如何用c#从服务器端删除facebook cookie?

+0

你在服务器端使用什么框架? ASP.NET? – Cameron 2011-03-05 04:38:04

+2

你不能。你只能礼貌地要求用户的浏览器删除它。但是cookie最终存储在用户的计算机上,您无法控制。如果用户只读cookie文件,即使浏览器是合作的,您的网站也不会做任何更改。 – 2011-03-05 04:54:40

+0

@Ben:好点,但大多数人不会只使他们的cookie文件只读;-) – Cameron 2011-03-05 05:01:12

回答

2

假设您知道cookie的名称,可以将它的过期日期设置为过去的某个时间。当浏览器收到cookie时,它会看到它已过期并将其删除。

如果您使用的是System.Web.HttpCookieCollectionthis MSDN article具有证明这一点(例如改编自上MSDN)的示例代码:

if (Request.Cookies["NameOfFacebookCookie"] != null) { 
    HttpCookie myCookie = new HttpCookie("NameOfFacebookCookie"); 
    myCookie.Expires = DateTime.Now.AddDays(-1d); 
    Response.Cookies.Add(myCookie); 
} 

既然你通过Facebook认证用户,我假设你”重新使用OAuth。在这种情况下,您的不需要知道cookie的名称,并且无论如何它不是您的cookie,它在登录过程中由facebook.com设置。要注销通过Facebook登录的用户,请参阅this answer

+0

样本和详细信息+1。如果目标是从Facebook.com域中删除cookie,它也可能不是Aleca正在寻找的答案。 – 2011-03-05 07:11:34

+0

@Alexei:对,但是除了要求Facebook这样做(因为[同源策略](http://en.wikipedia.org/wiki/),除了facebook.com域名外,真的没有办法删除cookie) Same_origin_policy)) – Cameron 2011-03-05 18:49:23

0

我不明白为什么我不能“评论”时,但无论如何;为了补充上面Alexei和Cameron之间的讨论,我们假设这个cookie是由Facebook控制的。如果你使用Javascript SDK,那么是的,Cameron的评论是真实的。但是,如果您创建了手动登录流(无SDK),以便您可以在服务器端处理登录,那么您可能创建了自己的Cookie来保存检索到的access_token,当然,您可以删除它。