3
3
namespace Http \Client \Common \Plugin ;
4
4
5
5
use Http \Client \Common \Plugin ;
6
+ use Http \Client \Exception \TransferException ;
6
7
use Http \Message \Cookie ;
7
8
use Http \Message \CookieJar ;
8
9
use Psr \Http \Message \RequestInterface ;
@@ -87,6 +88,8 @@ public function handleRequest(RequestInterface $request, callable $next, callabl
87
88
* @param $setCookie
88
89
*
89
90
* @return Cookie|null
91
+ *
92
+ * @throws TransferException
90
93
*/
91
94
private function createCookie (RequestInterface $ request , $ setCookie )
92
95
{
@@ -98,7 +101,8 @@ private function createCookie(RequestInterface $request, $setCookie)
98
101
99
102
list ($ name , $ cookieValue ) = $ this ->createValueKey (array_shift ($ parts ));
100
103
101
- $ expires = 0 ;
104
+ $ maxAge = null ;
105
+ $ expires = null ;
102
106
$ domain = $ request ->getUri ()->getHost ();
103
107
$ path = $ request ->getUri ()->getPath ();
104
108
$ secure = false ;
@@ -110,11 +114,21 @@ private function createCookie(RequestInterface $request, $setCookie)
110
114
111
115
switch (strtolower ($ key )) {
112
116
case 'expires ' :
113
- $ expires = \DateTime::createFromFormat (DATE_COOKIE , $ value );
117
+ $ expires = \DateTime::createFromFormat (\DateTime::COOKIE , $ value );
118
+
119
+ if (true !== ($ expires instanceof \DateTime)) {
120
+ throw new TransferException (
121
+ sprintf (
122
+ 'Cookie header `%s` expires value `%s` could not be converted to date ' ,
123
+ $ name ,
124
+ $ value
125
+ )
126
+ );
127
+ }
114
128
break ;
115
129
116
130
case 'max-age ' :
117
- $ expires = (new \ DateTime ())-> add ( new \ DateInterval ( ' PT ' .( int ) $ value. ' S ' )) ;
131
+ $ maxAge = (int ) $ value ;
118
132
break ;
119
133
120
134
case 'domain ' :
@@ -135,7 +149,7 @@ private function createCookie(RequestInterface $request, $setCookie)
135
149
}
136
150
}
137
151
138
- return new Cookie ($ name , $ cookieValue , $ expires , $ domain , $ path , $ secure , $ httpOnly );
152
+ return new Cookie ($ name , $ cookieValue , $ maxAge , $ domain , $ path , $ secure , $ httpOnly, $ expires );
139
153
}
140
154
141
155
/**
0 commit comments