當你訪問一個網站時,NSURLRequest都會幫你主動記錄下來你訪問的站點設置的cookie,如果 Cookie 存在的話,會把這些信息放在 NSHTTPCookieStorage 容器中共享,當你下次再訪問這個站點時,NSURLRequest會拿著上次保存下來了的cookie繼續去請求。原理是透過iOS提供的NSHTTPCookieStorage元件來控制所有從這個Application發出的HTTP Request,如果在UIWebview有使用iFrame或者AJAX發出的Request同樣會受到影響,讓cookie可以集中管理。
認識下NSHTTPCookieStorage
NSHTTPCookieStorage 實現了一個管理cookie的單例對象(只有一個實例),每個cookie都是NSHTTPCookie類的實例,最為一個規則,cookie在所有應用之間共享并在不同進程之間保持同步。Session cookie(一個isSessionOnly方法返回YES的cookie)只能在單一進程中使用。
request 設置cookie
//定義cookie要設設定的host?
NSURL*cookieHost=[NSURLURLWithString:@"url"];
// 設定 cookie
NSHTTPCookie*cookie=[NSHTTPCookiecookieWithProperties:
[NSDictionarydictionaryWithObjectsAndKeys:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [cookieHost ?host],NSHTTPCookieDomain,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?[cookieHost ? path],NSHTTPCookiePath,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? @"COOKIE_NAME",NSHTTPCookieName,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?@"COOKIE_VALUE",NSHTTPCookieValue,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? nil]];
// 設定 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];