iOS http请求 cookie值
1. 废话:最近项目中在登录时遇到一个http 请求cookie值的问题:
首先是向服务器发送请求(服务器IP,登录账号和密码等)验证是否登录成功,当登录成功后需要跳转到个人信息的界面,这时就需要在个人信息界面展示一些昵称,电话号码等信息;那么什么时候获取个人信息比较好 ? 怎么获取(前端(数据库,本地存储) 还是 后台服务器存储) ? 最后后台的意思是:在登录的时候服务器返回成功后紧接着向服务器请求个人信息,获取成功后存到本地,然后跳转到个人信息页面,从本地查询信息展示;
这里 面有个问题就是在 请求个人信息的时候只是在接口前面设置了一下cookie头。
只要登录成功了,那浏览器(后台服务器)就会有一个对应的cookie 值,然后个人信息接口访问服务器的时候有cookie 头就说明登录成功了,可以获取的该用户的所有信息;
2. Cookie
Cookie是在客户端存储服务器状态的一种机制,Web服务器可以通过Set-Cookie或者Set-Cookie2 HTTP头部设置Cookie。
Cookie可以分为两类,会话Cookie和持久Cookie,会话Cookie是临时Cookie,当前会话结束(浏览器退出)时Cookie会被删除。持久Cookie会存储在用户的硬盘上,浏览器退出,然后重新启动后Cookie仍然存在。会话Cookie和持久Cookie的区别在于过期时间,如果设置了Discard参数(Cookie 版本1)或者没有设置Expires(Cookie版本0)或Max-Age(Cookie版本1)设置过期时间,则此Cookie为会话Cookie。
3.应用
(1).cookie 的获取与保存
//请求一个网址,即可分配到cookie
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFJSONResponseSerializer
new
];
[manager GET:urlString parameters:dic
success:^(AFHTTPRequestOperation
*operation,
id
responseObject) {
//获取cookie
NSArray
*cookies = [[
NSHTTPCookieStorage
sharedHTTPCookieStorage]
cookies];
//
把cookie进行归档并转换为NSData类型
NSData
*cookiesData = [
NSKeyedArchiver
archivedDataWithRootObject:cookies
];
//存储归档后的cookie
NSUserDefaults
*userDefaults
= [
NSUserDefaults
standardUserDefaults];
[userDefaults setObject: cookiesData forKey:
@"cookie"
];
} failure:^(AFHTTPRequestOperation *operation,
NSError
*error)
{
//请求数据失败
}];
(2).cookie的设置
//取出保存的cookie
NSUserDefaults
*userDefaults = [
NSUserDefaults
standardUserDefaults];
//对取出的cookie进行反归档处理
NSArray
*cookies = [
NSKeyedUnarchiver
unarchiveObjectWithData:[userDefaults
objectForKey:
@"cookie"
]];
if
(cookies) {
//设置cookie
NSHTTPCookieStorage
*cookieStorage
= [
NSHTTPCookieStorage
sharedHTTPCookieStorage];
for
(
id
cookie
in cookies) {
[cookieStorage setCookie:(
NSHTTPCookie
*)cookie];
}
}
else
{
NSLog
(
@"cookie设置失败"
);
}
(3).cookie的删除
把获取到的cookie删除掉,该步骤可以用在注销或者切换账号里
NSHTTPCookieStorage
*cookieStorage
= [
NSHTTPCookieStorage
sharedHTTPCookieStorage];
NSArray
*cookies = [[
NSHTTPCookieStorage
sharedHTTPCookieStorage]
cookies];
//删除cookie
for
(
NSHTTPCookie
*tempCookie
in cookies) {
[cookieStorage deleteCookie:tempCookie];
}