
Cookie
Cookie
(1)Cookie由服务器端生成,发送给客户端。
(2)客户端将Cookie的key/value 保存到某个目录下的文本文件内。
(3)如果客户端支持Cookie,下次请求同一网站时就可以Cookie直接发送给服务器。
(4)Cookie名称和值由服务器端开发自己定义。
Cookie 最典型的应用是判定注册用户是否已经登录,记录用户登录信息,简化下次登录的过
程。比如:登陆一次不退出下一次不用再登录,Cookie一般只保存0或1判断登录状态。
另外一个最重要的应用场合是“购物车”。可以保存客户添加商品的信息,比如相机等,可以保
存一个标示符。
另外需要注意的是Cookie是由服务器端生成并发送给客户端的,我们把本地服务器打开后,
并在Sites(存放本地服务器网站的文件夹)中添加login2.html和login2.php ,并用正确的用户名
和密码在火狐浏览器进行测试如下所示,登陆后再次重新登录发现生成了Cookie。

为了对比服务器端的login.php和login2.php有何不同 操作步骤如下:
右键Xcode图标——>Open Developer Tool——>FileMerge

选择login.php和login2.php 对比 不同之处如下:

验证如下:

代码如下:
[objc] view plain copy
<span style="font-size:18px;">//
1.
// ViewController.m
2.
// Cookie使用
3.
//
4.
// Created by apple on 15/10/29.
5.
// Copyright (c) 2015年 LiuXun. All rights reserved.
6.
//
7.
8.
#import "ViewController.h"
9.
10.
@interface ViewController ()
11.
12.
@end
13.
14.
@implementation ViewController
15.
16.
- (void)viewDidLoad {
17.
[super viewDidLoad];
18.
19.
// 跟踪服务器端返回的Cookie,都在NSHTTPCookieStorage单例对象内。
20.
// 如果服务器端每返回任何Cookie, 就对应一个NSHTTPCookie对象
21.
NSLog(@"%@", [NSHTTPCookieStorage sharedHTTPCookieStorage].cookies);
22.
23.
// 以用户的登录为例进行演示从Cookie里面读取内容
24.
for (NSHTTPCookie *cookie in [NSHTTPCookieStorage sharedHTTPCookieStorage].cookies) {
25.
// 数组里面存放的是NSHTTPCookie对象
26.
// NSHTTPCookie对象里面有个properties属性字典
27.
// 字典里userName对应的值,就是服务器返回的cookie的内容
28.
// 字典里userPassword对应的值,就是服务器返回的cookie的内容
29.
NSLog(@"%@", cookie.properties);
30.
if ([cookie.name isEqualToString:@"userName"]) {
31.
NSLog(@"记录的用户名 %@", cookie.value);
32.
}else if ([cookie.name isEqualToString:@"userPassword"])
33.
{
34.
NSLog(@"记录的密码 %@", cookie.value);
35.
}
36.
}
37.
}
38.
39.
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
40.
{
41.
// 1. url
42.
NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/login2.php"];
43.
44.
// 2. 请求
45.
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:1 timeoutI
46.
nterval:2.0f];
47.
// 2.1
48.
request.HTTPMethod = @"POST";
49.
50.
// 2.2 设置数据体
51.
// NSString *body = @"username=zhangsan&password=zhang";
52.
//
53.
// request.HTTPBody = [body dataUsingEncoding:NSUTF8StringEncoding];
54.
55.
56.
// 3. 连接
57.
[NSURLConnection sendAsynchronousRequest:request queue:
58.
[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *
connectionError) {
NSError *error =nil;
59.
id result = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
60.
if (error) {
61.
NSLog(@"%@", [error localizedDescription]);
62.
}
63.
NSLog(@"%@", result);
64.
65.
}];
66.
67.
}
68.
@end</span>
69.
第一次发送数据体,运行结果如下:

打开沙盒路径发现生成了Cookies文件夹,打开如下:

使用终端打开此Cookies文件夹内的文件如下:

第二次不发送数据体,重新运行如下:

说明第二次是客户端直接从沙盒Cookie文件中读取的第一次服务器端发送的Cookie信息。
另外 发现Cookie存放的是明文,不安全。只能存放一些别的信息,比如登录状态0或1 购物
车等不涉及用户隐私的信息。那么如何判断并跟踪服务器发送到客户端的Cookies呢?
跟踪服务器端返回的Cookie都在NSHTTPCookieStorage单例对象内,每当服务器返回一个
Cookie,就对应着一个NSHTTPCookie对象。NSHTTPCookieStorage单例对象的获取方法
如下:
+ (NSHTTPCookieStorage *)sharedHTTPCookieStorage;
此单例对象有一个cookies属性数组,数组内的每一个元素都是每一个NSHTTPCookie对象
@property (readonly,copy)NSArray *cookies;
每一个NSHTTPCookie对象都有一个只读的properties字典属性
@property (readonly,copy)NSDictionary *properties;
每一个properties字典属性里都有一个name和value属性,与服务器端的Cookie相对相应。
具体使用如下:
//以用户的登录为例进行演示从Cookie里面读取内容
for (NSHTTPCookie *cookiein [NSHTTPCookieStoragesharedHTTPCookieStorage].cookie
s) {
//数组里面存放的是NSHTTPCookie对象
// NSHTTPCookie对象里面有个properties属性字典
//字典里userName对应的值,就是服务器返回的cookie的内容
//字典里userPassword对应的值,就是服务器返回的cookie的内容
NSLog(@"%@", cookie.properties);
if ([cookie.nameisEqualToString:@“userName”]) {
NSLog(@“记录的用户名 %@”, cookie.value);
}elseif ([cookie.nameisEqualToString:@“userPassword”])
{
NSLog(@“记录的密码 %@”, cookie.value);
}
}
打印Cookies内容,并取出指定的内容如下:
