2015-07-10 59 views
0

我正在開發一個控制檯應用程序在C#做一些網站的背景刮。沒有使用webbrowser,winform或ASP等,只需簡單的http請求&響應。重新登錄後,立即被拒絕在C#網站註銷後退出#

我有這個註銷網站的問題,會話仍然存在,所以我的重新登錄在註銷後很快被拒絕,因爲該網站只允許一個併發用戶登錄。我做了谷歌研究,但沒有發現任何線索。

這裏是註銷代碼:

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會被更新,因此請求中的重新記錄將被重定向到登錄頁面。我怎麼能像瀏覽器那樣做呢?

+0

您應該將從登錄請求獲取的Cookie分配給註銷請求。簡單的方法是使用相同的請求實例。 – Graffito

+0

我強制註銷的主要原因是我需要確保在重複測試刮取時我的重新登錄不會被拒絕。一旦我關閉了我的應用程序,我不確定在哪裏抓取舊cookie的建議。舊會話通常在5分鐘後到期,因此我可以再次登錄,但仍然很麻煩。 – Ben

+0

我不知道HttpHelper類,但我想你可以在Login HttpResult中獲取Cookies(CookieCollection或CookiesContainer)。您可以存儲Cookie以在註銷請求中重複使用它們。我不認爲這與從註銷請求獲得的cookie有關。我寧願認爲註銷失敗,因爲註銷請求沒有包含預期的cookie。 – Graffito

回答

0

我遇到的問題是由於TerminateProcess的關閉,在它有機會運行之前強制關閉了我的主應用程序和註銷。 因此,我用一個軟關閉取代TerminateProcess,它給出註銷信號以在我的主應用程序關閉之前正常運行。我還取消登錄前使用的註銷步驟。這樣,cookies就會失效並在註銷時存儲。現在,如果我嘗試登出後立即登錄,一切都很好,因爲cookie中的魔力。我們得到的一個教訓是,在提出請求時,我們需要使用CookieCollection而不是簡單的Cookie。前者將負責更新cookie容器中的cookie。