C# 在C中注销网站后立即拒绝重新登录

C# 在C中注销网站后立即拒绝重新登录,c#,session,cookies,logout,C#,Session,Cookies,Logout,我正在用C语言开发一个控制台应用程序,以便从一个网站上进行一些后台抓取。没有使用webbrowser、winform或ASP等,只是简单的http请求和响应 我有这个问题,注销该网站,会话仍然处于活动状态,因此我的重新登录在注销后很快被拒绝,因为该网站只允许一个并发用户登录。我做过谷歌调查,但还没有发现任何线索 以下是注销代码: public HttpResult logout() { HttpHelper http = new HttpHelper();

我正在用C语言开发一个控制台应用程序,以便从一个网站上进行一些后台抓取。没有使用webbrowser、winform或ASP等,只是简单的http请求和响应

我有这个问题,注销该网站,会话仍然处于活动状态,因此我的重新登录在注销后很快被拒绝,因为该网站只允许一个并发用户登录。我做过谷歌调查,但还没有发现任何线索

以下是注销代码:

    public HttpResult logout()
    {
        HttpHelper http = new HttpHelper();
        HttpItem item = new HttpItem()
        {
            URL = "https://w w w.mysite.com/logoff",
            Method = "get",
            ResultCookieType = ResultCookieType.CookieCollection,
            Allowautoredirect = true,
        };
        HttpResult res = http.GetHtml(item);

        return res;
    }

我使用Httpwatch查看了请求/响应头以及cookie。我发现,在注销后,响应包含三个值为零的cookie。我的印象是,在浏览器的情况下,这些cookie会得到更新,因此重新登录请求将被重定向到登录页面。我如何才能像浏览器那样完成它呢?

我遇到的问题是由于TerminateProcess关闭,在我的主应用程序有机会运行之前,它在注销时被迫关闭。
所以我用软关闭来代替TerminateProcess,在我的主应用程序关闭之前,它会向注销发出正常运行的信号。我还取消了登录前使用的注销步骤。这样,cookie将在注销时失效并存储。现在,如果我尝试在注销后立即登录,由于cookies中的魔力,一切都很好。我们学到的一个教训是,在发出请求时,我们需要使用CookieCollection而不是简单的cookie。前者负责更新cookie容器中的cookie。

您应该将从登录请求获得的cookie分配给注销请求。最简单的方法是使用相同的请求实例。我强制注销的主要原因是,我需要确保在重复测试刮片时,重新登录不会被拒绝。一旦我关闭了我的应用程序,我不知道在哪里可以像你建议的那样抓取旧的cookie。旧会话通常会在5分钟后过期,因此我可以再次登录,但仍然很麻烦。我不知道HttpHelper类,但我想您可以登录HttpResult Cookies CookieCollection或CookiesContainer。您可以存储cookie以在注销请求中重用它们。我不认为这与注销请求得到的cookies有关。我认为注销失败是因为注销请求没有包含预期的cookies。以下是HttpResult的打印输出:STAT%5FUID=6E884BB1-A1CC-4244-A9C5-926AF4CF6B61 STAT%5FUNIQUE%5FUID=8EEDF377-D29D-4AF8-AAE0-3AF4B5358ED4 IV%5FUID=0 IV%5FUID%5FKEY=0 UKL=0 JSESSIONID=0 JSESSIONID=a74ebj3jq5httphelper只是一个包装类封装HttpRequest和HttpResponse的详细信息。从HttpResult打印出来的Cookie及其值看起来与我使用IE和HttpWatch看到的完全相同,因此注销部分成功,只是新的Cookie没有像浏览器那样写入文件,因此旧的Cookie仍然有效,仍然用于登录。如何删除旧的并添加新的?