Browse Source

Fix cookies sending by ResponseEmitter.

ADmad 9 years ago
parent
commit
4efbfcda4c
1 changed files with 22 additions and 2 deletions
  1. 22 2
      src/Http/ResponseEmitter.php

+ 22 - 2
src/Http/ResponseEmitter.php

@@ -162,9 +162,14 @@ class ResponseEmitter implements EmitterInterface
      */
     protected function emitHeaders(ResponseInterface $response)
     {
+        $cookies = [];
+        if (method_exists($response, 'cookie')) {
+            $cookies = $response->cookie();
+        }
+
         foreach ($response->getHeaders() as $name => $values) {
             if (strtolower($name) === 'set-cookie') {
-                $this->emitCookies($values);
+                $cookies = array_merge($cookies, $values);
                 continue;
             }
             $first = true;
@@ -177,6 +182,8 @@ class ResponseEmitter implements EmitterInterface
                 $first = false;
             }
         }
+
+        $this->emitCookies($cookies);
     }
 
     /**
@@ -187,7 +194,20 @@ class ResponseEmitter implements EmitterInterface
      */
     protected function emitCookies(array $cookies)
     {
-        foreach ((array)$cookies as $cookie) {
+        foreach ($cookies as $cookie) {
+            if (is_array($cookie)) {
+                setcookie(
+                    $cookie['name'],
+                    $cookie['value'],
+                    $cookie['expire'],
+                    $cookie['path'],
+                    $cookie['domain'],
+                    $cookie['secure'],
+                    $cookie['httpOnly']
+                );
+                continue;
+            }
+
             if (strpos($cookie, '";"') !== false) {
                 $cookie = str_replace('";"', "{__cookie_replace__}", $cookie);
                 $parts = str_replace("{__cookie_replace__}", '";"', explode(';', $cookie));