Session&Cookie作用
Session&Cookie都是对HTTP协议的无状态特点的补偿。所谓无状态就是:client多次向server端发送请求,server端是无法记住是不是同一个用户的。比如多次向购物车中添加商品,此时server端不知道是不是之前的用户在请求,这就是无状态。
一、cookie简介
cookie主要是用来记录用户状态,区分用户,cookie的状态是保存在客户端。
1、cookie是怎么生成的呢?
client端发送请求到server端,此时server端会生成cookie,再通过server端的响应将cookie携带上返回给client。
2、cookie是怎么彼此传递呢?
a、client发送的cookie在HTTP请求报文的cookie首部字段中。
b、server设置的HTTP响应报文的Set-Cookie首部字段将cookie传递给client。
3、怎么修改cookie?
a、新的cookie覆盖旧的cookie
b、覆盖规则:name、path、domain等都需要与原cookie一致,否则无法覆盖。
4、怎么删除cookie?
a、新的cookie覆盖旧的cookie
b、覆盖规则:name、path、domain等都需要与原cookie一致,否则无法覆盖。
c、设置cookie的expires=一个过去的时间点,或者maxAge=0
5、怎样保证cookie的安全?
a、对cookie进行加密处理(脚本攻击可以获取到cookie,不太安全)
b、只在HTTPS上携带cookie(更优,所有的内容都是通过HTTPS加密,也就保证了cookie的安全)
c、设置cookie为httpOnly,防止跨站脚本攻击
6、token在项目中的应用
在项目中我们由于实际需要,每个网络请求都需要添加token,那么我们不可能给每个请求都添加上token值。所以,我们最好封装好一个请求类,然后封装好必掉用的AFHTTPSessionManager中,在请求头里面添加token。如下:
此类方法必被调用。
+ (AFHTTPSessionManager *)sessoionConfigration:(BOOL)isHttps{
AFHTTPSessionManager *manager=[AFHTTPSessionManager manager];
if (isHttps) {
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"cert" ofType:@"cer"];
NSData * certData =[NSData dataWithContentsOfFile:cerPath];
NSSet * certSet = [[NSSet alloc] initWithObjects:certData, nil];
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
// 是否允许,NO-- 允许无效的证书
[securityPolicy setAllowInvalidCertificates:YES];
[securityPolicy setValidatesDomainName:NO];
// 设置证书
[securityPolicy setPinnedCertificates:certSet];
manager.securityPolicy = securityPolicy;
}
manager.requestSerializer=[AFHTTPRequestSerializer serializer];
manager.responseSerializer=[AFHTTPResponseSerializer serializer];
[manager.requestSerializer setTimeoutInterval:REQUEST_TIMEOUT];
//添加 User-Agent 后面追加版本号
NSString* userAgent = [NSString httpHeaderAgent];
if (userAgent) {
[manager.requestSerializer setValue:userAgent forHTTPHeaderField:@"User-Agent"];
}
//把token存储到Header中
[manager.requestSerializer setValue:[UserManager shareInstance].token forHTTPHeaderField:@"token"];
return manager;
}
AFHTTPSessionManager* manager = [WebService sessoionConfigration:[url hasPrefix:@"https://"]];
return [manager GET:url
parameters:body ·········
二、Session
session也是用来记录用户状态,区分用户的,只不过是存放到服务端的。
1、Session和Cookie的关系是怎样的?
Session需要依赖于Cookie机制来实现,具体说就是session依赖于Set-Cookie和Cookie机制的请求和相应的报文头部字段

网友评论