无法使用Win32 InternetSetCookie函数删除cookie

时间:2016-12-04 04:14:45

标签: c# cookies asana-api

我在桌面应用程序中使用OAuth登录Asana创建了一个cookie(C#,使用WebBrowser控件)。它存储在C:\ Users \ elega \ AppData \ Local \ Microsoft \ Windows \ INetCache中,名为“cookie:elega@app.asana.com /".

我想删除它,以便当我导航到OAuth页面时,Asana的API不会自动为我提供新的令牌。当手动删除该cookie时,它会强制用户再次登录 - 这就是我想要的。

根据我的研究,您似乎无法直接使用代码删除Cookie,但您可以将其过期。所以我正在使用InternetSetCookie函数,但它似乎没有修改cookie文件(根据文件中最后修改的数据标记判断,以及OAuth仍然给我标记的事实)。我没有看到关于cookie名称可能有什么广泛的解释,但我已经尝试了下面的所有变化,没有任何工作。我做错了什么?

class DeleteCookie
{
    [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
    static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData);

    private void Delete()
    {
        bool returnVal;

        returnVal = InternetSetCookie("https://app.asana.com", "cookie:elega@app.asana.com/", "expires = Sat,01-Jan-1970 00:00:00 GMT");
        returnVal = InternetSetCookie("https://app.asana.com", "elega@app.asana.com/", "expires = Sat,01-Jan-1970 00:00:00 GMT");
        returnVal = InternetSetCookie("https://app.asana.com", "cookie:elega@app.asana.com", "expires = Sat,01-Jan-1970 00:00:00 GMT");
        returnVal = InternetSetCookie("https://app.asana.com", "elega@app.asana.com", "expires = Sat,01-Jan-1970 00:00:00 GMT");
        returnVal = InternetSetCookie("https://app.asana.com", null, "expires = Sat,01-Jan-1970 00:00:00 GMT");
    }
}    

2 个答案:

答案 0 :(得分:0)

只需使用File.Delete方法从您提供的特定目录中删除cookie。

答案 1 :(得分:0)

@Eric Legault,我是Asana的开发者倡导者。我环顾四周试图看看哪些对你有用。

首先,我们就此行为提出了一些要求;具体来说,我们已经建议在此重定向流程中添加一项功能,其中集成可以导致用户选择器出现,以便让集成使用机器人帐户登录Asana,即使有一天今天的Asana帐户也登录了。这是你希望完成的事情吗? (知道帮助我们确定事情的优先事项会很好)

在任何情况下,我都可以给你一些指导,试图让这个工作,但因为这是一个非常hacky退出的方式(虽然我们的错,因为我们首先没有让这很容易),我会如果您发送电子邮件至devrel@asana.com而不是在公共频道发布,则更喜欢。我们面临的风险是,我们可能会发布有关非官方支持的管理注销方式的信息,如果我们更改我们的Cookie架构,可能会导致依赖于黑客攻击的集成中断,这对我们所有人来说都很难过。如果您有兴趣,请随时直接与我们联系!