Quellcode durchsuchen

show cookies in response headers

Johannes M. Schmitt vor 14 Jahren
Ursprung
Commit
bdc7ae8c52

+ 47 - 1
src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php

@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\HttpKernel\DataCollector;
 
+use Symfony\Component\HttpFoundation\Cookie;
 use Symfony\Component\HttpFoundation\ParameterBag;
 use Symfony\Component\HttpFoundation\HeaderBag;
 use Symfony\Component\HttpFoundation\Request;
@@ -29,6 +30,15 @@ class RequestDataCollector extends DataCollector
      */
     public function collect(Request $request, Response $response, \Exception $exception = null)
     {
+        $responseHeaders = $response->headers->all();
+        $cookies = array();
+        foreach ($response->headers->getCookies() as $cookie) {
+            $cookies[] = $this->getCookieHeader($cookie->getName(), $cookie->getValue(), $cookie->getExpire(), $cookie->getPath(), $cookie->getDomain(), $cookie->isSecure(), $cookie->isHttponly());
+        }
+        if (count($cookies) > 0) {
+            $responseHeaders['Set-Cookie'] = $cookies;
+        }
+
         $this->data = array(
             'format'             => $request->getRequestFormat(),
             'content_type'       => $response->headers->get('Content-Type') ? $response->headers->get('Content-Type') : 'text/html',
@@ -39,7 +49,7 @@ class RequestDataCollector extends DataCollector
             'request_server'     => $request->server->all(),
             'request_cookies'    => $request->cookies->all(),
             'request_attributes' => $request->attributes->all(),
-            'response_headers'   => $response->headers->all(),
+            'response_headers'   => $responseHeaders,
             'session_attributes' => $request->hasSession() ? $request->getSession()->getAttributes() : array(),
         );
     }
@@ -106,4 +116,40 @@ class RequestDataCollector extends DataCollector
     {
         return 'request';
     }
+
+    protected function getCookieHeader($name, $value, $expires, $path, $domain, $secure, $httponly)
+    {
+        $cookie = sprintf('%s=%s', $name, urlencode($value));
+
+        if (0 !== $expires) {
+            if (is_numeric($expires)) {
+                $expires = (int) $expires;
+            } elseif ($expires instanceof \DateTime) {
+                $expires = $expires->getTimestamp();
+            } else {
+                $expires = strtotime($expires);
+                if (false === $expires || -1 == $expires) {
+                    throw new \InvalidArgumentException(sprintf('The "expires" cookie parameter is not valid.', $expires));
+                }
+            }
+
+            $cookie .= '; expires='.substr(\DateTime::createFromFormat('U', $expires, new \DateTimeZone('UTC'))->format('D, d-M-Y H:i:s T'), 0, -5);
+        }
+
+        if ($domain) {
+            $cookie .= '; domain='.$domain;
+        }
+
+        $cookie .= '; path='.$path;
+
+        if ($secure) {
+            $cookie .= '; secure';
+        }
+
+        if ($httponly) {
+            $cookie .= '; httponly';
+        }
+
+        return $cookie;
+    }
 }