前言
會話(Session)跟蹤是Web程序中常用的技術,用來跟蹤用戶的整個會話。常用的會話跟蹤技術是Cookie與Session。Cookie通過在客戶端記錄信息確定用戶身份,Session通過在服務器端記錄信息確定用戶身份,在移動開發中Cookie越來越多用到了Cookie,覺得有必要去學習。
什么是Cookie
Cookie意為“甜餅”,是由W3C組織提出,最早由Netscape社區發展的一種機制。目前Cookie已經成為標準,所有的主流瀏覽器如IE、Netscape、Firefox、Opera等都支持Cookie。由于HTTP是一種無狀態的協議,服務器單從網絡連接上無從知道客戶身份。怎么辦呢?就給客戶端們頒發一個通行證吧,每人一個,無論誰訪問都必須攜帶自己通行證。這樣服務器就能從通行證上確認客戶身份了。這就是Cookie的工作原理。
Cookie實際上是一小段的文本信息。客戶端請求服務器,如果服務器需要記錄該用戶狀態,就使用response向客戶端瀏覽器頒發一個Cookie。客戶端瀏覽器會把Cookie保存起來。當瀏覽器再請求該網站時,瀏覽器把請求的網址連同該Cookie一同提交給服務器。服務器檢查該Cookie,以此來辨認用戶狀態。服務器還可以根據需要修改Cookie的內容。
iOS下Cookie的用法
iOS中主要用到兩個類對Cookie進行操作:
- NSHTTPCookie:在iOS中使用NSHTTPCookie類封裝一條Cookie,通過NSHTTPCookie的方法讀取到cookie的通用屬性
-
NSHTTPCookieStorage:單件類提供了管理所有NSHTTPCookie對象的接口,在OS X里,cookie是在所有程序中共享的,而在iOS中,cookie只當當前應用中有效
如果想深入了解Cookie,大家可以參考下面兩篇博客:
iOS cookie的三種逆天用法 介紹Cookie的三個用法(獲取,修改,保存),還有代碼可以參考
iOS中Cookie介紹 詳細介紹了NSHTTPCookie和NSHTTPCookieStorage兩個類的具體用法
項目中用到的Cookie
項目中,當用戶登錄后,后臺返回一個authKey,需要我把authKey寫進Cookie獲得登陸后請求的權限。由于對Cookie的不熟悉,一下子懵逼了,一開始還以為要在Cookie中增加一個鍵值對,可惜怎么設置都不成功,后來發現Cookie可以做到上面的三種用法,沒法做到修改,最多新建一個替換原來的Cookie。最后發現自己再創建一個Cookie就行了,明白了才知道那么簡單!!!代碼如下:
NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];
[cookieProperties setObject:@"authKey" forKey:NSHTTPCookieName];
[cookieProperties setObject:@"服務器ip" forKey:NSHTTPCookieDomain];
[cookieProperties setObject:@"服務器ip" forKey:NSHTTPCookieCommentURL];
[cookieProperties setObject:aut.authKey forKey:NSHTTPCookieValue];
[cookieProperties setObject:@"/" forKey:NSHTTPCookiePath];
[cookieProperties setObject:@"0" forKey:NSHTTPCookieVersion];
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
設置好之后保存好,下次請求就會帶上自己設置的Cookie,這樣后面登錄后的請求就可以成功了!
第一次在簡書上發表自己的文章,略緊張~