From 0603e95557fce46c42c507c4e6ea9d7366f63941 Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Thu, 14 Mar 2019 09:59:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dcookie=E8=BF=87=E6=9C=9F?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E4=B8=8D=E5=87=86=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Http/HttpClient.cpp | 19 ++++++++++++------- src/Http/HttpClient.h | 2 +- src/Http/HttpCookie.cpp | 14 +++++++++++--- src/Http/HttpCookie.h | 2 +- 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/Http/HttpClient.cpp b/src/Http/HttpClient.cpp index 2c154e9d..51446c0a 100644 --- a/src/Http/HttpClient.cpp +++ b/src/Http/HttpClient.cpp @@ -255,7 +255,7 @@ void HttpClient::onResponseCompleted_l() { onResponseCompleted(); } -void HttpClient::checkCookie(const HttpClient::HttpHeader &headers) { +void HttpClient::checkCookie(HttpClient::HttpHeader &headers) { //Set-Cookie: IPTV_SERVER=8E03927B-CC8C-4389-BC00-31DBA7EC7B49;expires=Sun, Sep 23 2018 15:07:31 GMT;path=/index/api/ auto it_set_cookie = headers.find("Set-Cookie"); if(it_set_cookie == headers.end()){ @@ -274,12 +274,17 @@ void HttpClient::checkCookie(const HttpClient::HttpHeader &headers) { if(index++ == 0){ cookie->setKeyVal(key,val); - } else{ - if(key == "path"){ - cookie->setPath(val); - }else if(key == "expires"){ - cookie->setExpires(val); - } + continue; + } + + if(key == "path") { + cookie->setPath(val); + continue; + } + + if(key == "expires"){ + cookie->setExpires(val,headers["Date"]); + continue; } } diff --git a/src/Http/HttpClient.h b/src/Http/HttpClient.h index fcf0ec8f..4e01699d 100644 --- a/src/Http/HttpClient.h +++ b/src/Http/HttpClient.h @@ -310,7 +310,7 @@ protected: virtual void onManager() override; private: void onResponseCompleted_l(); - void checkCookie(const HttpHeader &headers ); + void checkCookie(HttpHeader &headers ); protected: bool _isHttps; private: diff --git a/src/Http/HttpCookie.cpp b/src/Http/HttpCookie.cpp index c26db1c4..975cc2ce 100644 --- a/src/Http/HttpCookie.cpp +++ b/src/Http/HttpCookie.cpp @@ -26,6 +26,7 @@ #include "HttpCookie.h" #include "Util/util.h" +#include "Util/logger.h" #if defined(_WIN32) #include "strptime_win.h" @@ -40,10 +41,17 @@ void HttpCookie::setPath(const string &path){ void HttpCookie::setHost(const string &host){ _host = host; } -void HttpCookie::setExpires(const string &expires){ +static uint32_t timeStrToInt(const string &date){ struct tm tt; - strptime(expires.data(),"%a, %b %d %Y %H:%M:%S %Z",&tt); - _expire = mktime(&tt); + strptime(date.data(),"%a, %b %d %Y %H:%M:%S %Z",&tt); + return mktime(&tt); +} +void HttpCookie::setExpires(const string &expires,const string &server_date){ + _expire = timeStrToInt(expires); + if(!server_date.empty()){ + _expire = time(NULL) + (_expire - timeStrToInt(server_date)); +// DebugL << (timeStrToInt(expires) - timeStrToInt(server_date)) / 60; + } } void HttpCookie::setKeyVal(const string &key,const string &val){ _key = key; diff --git a/src/Http/HttpCookie.h b/src/Http/HttpCookie.h index 54d1db14..a95120e1 100644 --- a/src/Http/HttpCookie.h +++ b/src/Http/HttpCookie.h @@ -45,7 +45,7 @@ public: void setPath(const string &path); void setHost(const string &host); - void setExpires(const string &expires); + void setExpires(const string &expires,const string &server_date); void setKeyVal(const string &key,const string &val); operator bool ();