网络相关知识Session&Cookie

2019-06-12  本文已影响0人  woniu

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机制的请求和相应的报文头部字段


session工作流程图
上一篇 下一篇

猜你喜欢

热点阅读