我必须在用户登录时更新用户位置。因为我需要在后台模式下更新位置(我使用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会话对象的范围?如果我错了,请原谅我。
请帮帮我,谢谢。