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 的原因,我豬的。
這種場景可以解決第一次登錄也需要驗證碼的網站。沒有登錄就沒辦法發布或刷新信息。
如趕集網。