HttpClient_HttpClient 對 cookie的處理


session的保持是通過cookie來維持的,所以如果用戶有勾選X天內免登錄,這個session 就X天內一直有效,就是通過這個cookie來維護。如果沒選X天內免登錄,基本上就本次才能保持session,下次打開瀏覽器就要重新登錄了。 
所以在web安全里,黑客通過XSS,最終目的就是獲取cookie,從免登錄直接進入系統。 

這次要講的是,得到用戶cookie后,免登錄,用HttpClient 保持原來session訪問原本一定要登錄才能做的事。 

HttpClient 4.x 庫可以自己處理Cookie 
有兩咱廣度可以添加cookie, 
1.通過  httpclient.setCookieStore(cookieStore) 
2.通過  httpGet 或者 httpPost 的addHeader(new BasicHeader("Cookie",cookie)); 


第一種, 
HttpClient是否在下次請求中攜帶從服務器端請求來的Cookie,完全是由設置決定的。 

httpclient.getParams.setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BEST_MATCH) 或者 CookiePolicy.BROWSER_COMPATIBILITY 
如果設置為Cookie策略為BEST_MATCH,或BROWSER_COMPATIBILITY的話,HttpClient會在請求中攜帶由服務器返回的Cookie。如果不設置,應該需要手動添加了CookieStore,才會保持sesson. 

如果設置為Cookie策略為默認的話,沒設置,則需要手動通過 
httpclient.setCookieStore(cookieStore); 去設置. 

注:如果用的是同一個HttpClient(上下兩個請求用同一個httpclient對象。 
且沒去手動連接放掉client.getConnectionManager().shutdown(); )! 
都不用去設置cookie的ClientPNames.COOKIE_POLICY。httpclient都是會保留cookie的! 


第二種, 
通過Header去設置cookie,這種方法,就是今天要用的應用場景, 
我們得到一個登錄的cookie,免登錄訪問。 
可以用瀏覽器登錄,然后f12通過console 執行 document.cookie 得到cookie, 
用這個cookie ,在訪問時,設置  httpGet 或者 httpPost 的addHeader(new BasicHeader("Cookie",cookie));就可以免登錄訪問。 


這種場景我用來用第一種方法,設置沒成功,可能是因為用第一種時,沒設置path,domain,expire 的原因,我豬的。 

這種場景可以解決第一次登錄也需要驗證碼的網站。沒有登錄就沒辦法發布或刷新信息。 
如趕集網。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM