swift中的HTTP会话管理

时间:2016-05-09 15:20:40

标签: ios swift cookies nsurlsession

我必须在用户登录时更新用户位置。因为我需要在后台模式下更新位置(我使用https://github.com/voyage11/Location存储库来接收后台模式委托调用),所以我将更新位置调用放在AppDelegate中。

当用户登录服务器并请求任何其他其他API时,HTTP请求将获取会话对象。但只有更新位置休息API请求才能获取会话对象。

我试图通过直接将cookie设置到请求对象的HTTPHeader来发送cookie。但是,它不包含会话对象。

extension AppDelegate : LocationTrackerDelegate {

func updateLocation(location: CLLocationCoordinate2D) {

    let loc = [ "lat": location.latitude, "lng": location.longitude]


    let urlStr = IRAPIPathManager.sharedManager.pathForUpdateLocation()
    let cookie = NSHTTPCookieStorage.sharedHTTPCookieStorage().cookies?.last

    // create post request
    let url = NSURL(string: urlStr)!
    let request = NSMutableURLRequest(URL: url)
    request.HTTPMethod = "POST"
    request.HTTPShouldHandleCookies = true

    // Set Cookie
    if cookie != nil {
        let date = Utility.getDateStringFromNSDate((cookie?.expiresDate)!, format: "EEE dd MMM yyyy HH:mm:ss ZZZZ")
        let cooki = "\(cookie!.name)=\(cookie!.value); Path=\(cookie!.path); Expires=\(date); HttpOnly"
        request.setValue( cooki , forHTTPHeaderField: "Set-Cookie")
    }

    request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
    let jsonData = try NSJSONSerialization.dataWithJSONObject(loc, options: .PrettyPrinted)
    request.HTTPBody = jsonData

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request){ data, response, error in


    }
    task.resume()

}
}

当用户登录服务器时,服务器会向设备发送会话对象。进行任何HTTP rest调用时,会话对象将在内部插入到请求中。但是,updateLocation API调用只是一个获取会话对象的调用。是否存在HTTP会话对象的范围?如果我错了,请原谅我。

请帮帮我,谢谢。

0 个答案:

没有答案