當(dāng)你訪問一個網(wǎng)站時谐腰,NSURLRequest都會幫你主動記錄下來你訪問的站點(diǎn)設(shè)置的cookie抚笔,如果 Cookie 存在的話,會把這些信息放在 NSHTTPCookieStorage 容器中共享,當(dāng)你下次再訪問這個站點(diǎn)時民镜,NSURLRequest會拿著上次保存下來了的cookie繼續(xù)去請求弄唧。原理是透過iOS提供的NSHTTPCookieStorage元件來控制所有從這個Application發(fā)出的HTTP Request适肠,如果在UIWebview有使用iFrame或者AJAX發(fā)出的Request同樣會受到影響,讓cookie可以集中管理候引。
認(rèn)識下NSHTTPCookieStorage
NSHTTPCookieStorage 實(shí)現(xiàn)了一個管理cookie的單例對象(只有一個實(shí)例)侯养,每個cookie都是NSHTTPCookie類的實(shí)例,最為一個規(guī)則澄干,cookie在所有應(yīng)用之間共享并在不同進(jìn)程之間保持同步逛揩。Session cookie(一個isSessionOnly方法返回YES的cookie)只能在單一進(jìn)程中使用柠傍。
request 設(shè)置cookie
//定義cookie要設(shè)設(shè)定的host?
NSURL*cookieHost=[NSURLURLWithString:@"url"];
// 設(shè)定 cookie
NSHTTPCookie*cookie=[NSHTTPCookiecookieWithProperties:
[NSDictionarydictionaryWithObjectsAndKeys:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [cookieHost ?host],NSHTTPCookieDomain,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?[cookieHost ? path],NSHTTPCookiePath,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? @"COOKIE_NAME",NSHTTPCookieName,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?@"COOKIE_VALUE",NSHTTPCookieValue,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? nil]];
// 設(shè)定 cookie 到 storage 中
[[NSHTTPCookieStorage ? sharedHTTPCookieStorage] ? setCookie:cookie];
webView 清除cookie
//清除cookies
NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies]){
[storage deleteCookie:cookie];
}
WebView 清除緩存
[[NSURLCachesharedURLCache] removeAllCachedResponses];
NSURLCache * cache = [NSURLCache sharedURLCache];
[cache removeAllCachedResponses];
[cache setDiskCapacity:0];
[cache setMemoryCapacity:0];