Fixed #1630
authordaftshady <daftonshady@gmail.com>
Sat, 28 Sep 2013 14:44:27 +0000 (23:44 +0900)
committerdaftshady <daftonshady@gmail.com>
Sat, 28 Sep 2013 14:44:27 +0000 (23:44 +0900)
requests/cookies.py
requests/sessions.py

index f3ac64f0a3aabe3bf778dbc64d23868f8bf416e9..95157e7d0aed695831ce03ee71eba6a923ed152a 100644 (file)
@@ -404,3 +404,19 @@ def cookiejar_from_dict(cookie_dict, cookiejar=None):
         for name in cookie_dict:
             cookiejar.set_cookie(create_cookie(name, cookie_dict[name]))
     return cookiejar
+
+
+def merge_session_cookies(cookiejar, cookie_dict):
+    """Merges cookie_dict with session CookieJar.
+
+    :param cookiejar: Should be session cookie.
+    :param cookie_dict: Dict of key/values to be merged.
+    """
+    if cookiejar is None:
+        cookiejar = RequestsCookieJar()
+
+    if cookie_dict is not None:
+        for k in cookie_dict:
+            # Session should not be modified by request cookie.
+            if k not in [cookie.name for cookie in cookiejar]:
+                cookiejar.set_cookie(create_cookie(k, cookie_dict[k]))
index a7e6d4e7b85065b866bca1ef703f1e39011a25b1..b917acc82b27afecabc4b3bf7afcfd497c2ea720 100644 (file)
@@ -13,7 +13,7 @@ from collections import Mapping
 from datetime import datetime
 
 from .compat import cookielib, OrderedDict, urljoin, urlparse
-from .cookies import cookiejar_from_dict, extract_cookies_to_jar, RequestsCookieJar
+from .cookies import cookiejar_from_dict, extract_cookies_to_jar, RequestsCookieJar, merge_session_cookies
 from .models import Request, PreparedRequest
 from .hooks import default_hooks, dispatch_hook
 from .utils import to_key_val_list, default_headers
@@ -146,13 +146,6 @@ class SessionRedirectMixin(object):
 
             extract_cookies_to_jar(self.cookies, prepared_request, resp.raw)
 
-            # Restore original cookies in redirects response.
-            headers = resp.request.headers
-            try:
-                headers['Cookie'] = req.headers['Cookie']
-            except KeyError:
-                pass
-
             i += 1
             yield resp
 
@@ -329,6 +322,9 @@ class Session(SessionRedirectMixin):
         )
         prep = self.prepare_request(req)
 
+        # Add param cookies to session cookies
+        merge_session_cookies(self.cookies, cookies)
+
         proxies = proxies or {}
 
         # Gather clues from the surrounding environment.