ios中对cookie操作的两个类分别是:1. NSHTTPCookie 2. NSHTTPCookieStorage,具体的使用在这里就不多说了。
1.什么是Cookie(“小甜饼”)呢?
简单来说,Cookie就是服务器暂存放在你的电脑里的资料(.txt格式的文本文件),好让服务器用来辨认你的计算机。当你在浏览网站的时候,Web服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择都记录下来。当下次你再访问同一个网站,Web服务器会先看看有没有它上次留下的Cookie资料,有的话,就会依据Cookie里的内容来判断使用者,送出特定的网页内容给你。
Cookie有什么作用呢? 现在上许多网站都用新用户注册这一项,有时注册了一下,等到下次再访问该站点时,会自动识别到你,并且向你问好,是不是觉得很亲切?当然这种作用只是表面现象,更重要的是,网站可以利用cookie跟踪统计用户访问该网站的习惯,比如什么时间访问,访问了哪些页面,在每个网页的停留时间等。利用这些信息,一方面是可以为用户提供个性化的服务,另一方面,也可以作为了解所有用户行为的工具,对于网站经营策略的改进有一定参考价值。例如,你在某家航空公司站点查阅航班时刻表,该网站可能就创建了包含你旅行计划的Cookies,也可能它只记录了你在该站点上曾经访问过的Web页,在你下次访问时,网站根据你的情况对显示的内容进行调整,将你所感兴趣的内容放在前列。这是高级的Cookie应用。目前Cookie最广泛的是记录用户登录信息,这样下次访问时可以不需要输入自己的用户名、密码了——当然这种方便也存在用户信息泄密的问题,尤其在多个用户共用一台电脑时很容易出现这样的问题。 另外,有人认为网站利用cookie可能存在侵犯用户隐私的问题,但由于大多用户对此了解不多,而且这种对用户个人信息的利用多数作为统计数据之用,不一定造成用户的直接损失,因此现在对于cookie与用户隐私权的问题并没有相关法律约束,很多网站仍然在利用cookie跟踪用户行为,有些程序要求用户必须开启cookie才能正常应用。IE浏览器用户可以通过“隐私”选项中的隐私设置的高低来决定是否允许网站利用cookie跟踪自己的信息,从全部限制到全部允许,或者限制部分网站,也可以通过手动方式对具体的网站设置允许或者禁止使用cookie进行编辑。IE浏览器的默认设置是“中级”-对部分网站利用cookie有限制。个人电脑的cookie设置(对IE浏览器而言)可通过菜单“工具-Internet选项-隐私”来查看和修改。
1,获取cookie
获取cookie只能在请求中获取cookie,否则时获取不到的,url就不给出了,大家用自己的url测试一下就行。
获取到cookie后把cookie进行归档保存到userDefaults里
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
#pragma mark 获取并保存cookie到userDefaults - ( void )getAndSaveCookie { NSLog ( @"=============获取cookie==============" ); NSString *urlString = @"" ; //请求一个网址,即可分配到cookie AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.responseSerializer = [AFJSONResponseSerializer new ]; [manager GET:urlString parameters: nil success:^(AFHTTPRequestOperation *operation, id responseObject) { //获取cookie NSArray *cookies = [[ NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]; for ( NSHTTPCookie *tempCookie in cookies) { //打印获得的cookie NSLog ( @"getCookie: %@" , tempCookie); } /* * 把cookie进行归档并转换为NSData类型 * 注意:cookie不能直接转换为NSData类型,否则会引起崩溃。 * 所以先进行归档处理,再转换为Data */ NSData *cookiesData = [ NSKeyedArchiver archivedDataWithRootObject: [[ NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]]; //存储归档后的cookie NSUserDefaults *userDefaults = [ NSUserDefaults standardUserDefaults]; [userDefaults setObject: cookiesData forKey: @"cookie" ]; NSLog ( @"\n" ); [ self deleteCookie]; [ self setCoookie]; } failure:^(AFHTTPRequestOperation *operation, NSError *error) { nil ; }]; } |
2,删除cookie
把获取到的cookie删除掉,该步骤可以用在注销或者切换账号里。
当前,我这里删除cookie是为了检测后面的通过本地存储的数据进行设置cookie是否成功
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#pragma mark 删除cookie - ( void )deleteCookie { NSLog ( @"============删除cookie===============" ); NSHTTPCookieStorage *cookieStorage = [ NSHTTPCookieStorage sharedHTTPCookieStorage]; NSArray *cookies = [[ NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]; //删除cookie for ( NSHTTPCookie *tempCookie in cookies) { [cookieStorage deleteCookie:tempCookie]; } //把cookie打印出来,检测是否已经删除 NSArray *cookiesAfterDelete = [[ NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]; for ( NSHTTPCookie *tempCookie in cookiesAfterDelete) { NSLog ( @"cookieAfterDelete: %@" , tempCookie); } NSLog ( @"\n" ); } |
3,通过本地存储的数据设置cookie
把本地的cookie取出并反归档,设置到cookie中,并且检测cookie是否设置成功
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#pragma mark 再取出保存的cookie重新设置cookie - ( void )setCoookie { NSLog ( @"============再取出保存的cookie重新设置cookie===============" ); //取出保存的cookie NSUserDefaults *userDefaults = [ NSUserDefaults standardUserDefaults]; //对取出的cookie进行反归档处理 NSArray *cookies = [ NSKeyedUnarchiver unarchiveObjectWithData:[userDefaults objectForKey: @"cookie" ]]; if (cookies) { NSLog ( @"有cookie" ); //设置cookie NSHTTPCookieStorage *cookieStorage = [ NSHTTPCookieStorage sharedHTTPCookieStorage]; for ( id cookie in cookies) { [cookieStorage setCookie:( NSHTTPCookie *)cookie]; } } else { NSLog ( @"无cookie" ); } //打印cookie,检测是否成功设置了cookie NSArray *cookiesA = [[ NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]; for ( NSHTTPCookie *cookie in cookiesA) { NSLog ( @"setCookie: %@" , cookie); } NSLog ( @"\n" ); } |