Skip to content

Commit 478a5a2

Browse files
amelchioasvetlov
authored andcommitted
[3.5] Fix redirects with changing cookie values (#3576)
(cherry picked from commit 398b5ba) Co-authored-by: Anders Melchiorsen <amelchio@nogoto.net>
1 parent 79a7213 commit 478a5a2

File tree

4 files changed

+33
-5
lines changed

4 files changed

+33
-5
lines changed

CHANGES/3576.bugfix

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix an issue where cookies would sometimes not be set during a redirect.

CONTRIBUTORS.txt

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ Alexey Popravka
2626
Alexey Stepanov
2727
Amin Etesamian
2828
Amy Boyle
29+
Anders Melchiorsen
2930
Andrei Ursulenko
3031
Andrej Antonov
3132
Andrew Leech

aiohttp/client.py

+3-5
Original file line numberDiff line numberDiff line change
@@ -434,16 +434,14 @@ async def _request(
434434
"with AUTH argument or credentials "
435435
"encoded in URL")
436436

437-
session_cookies = self._cookie_jar.filter_cookies(url)
437+
all_cookies = self._cookie_jar.filter_cookies(url)
438438

439439
if cookies is not None:
440440
tmp_cookie_jar = CookieJar()
441441
tmp_cookie_jar.update_cookies(cookies)
442442
req_cookies = tmp_cookie_jar.filter_cookies(url)
443443
if req_cookies:
444-
session_cookies.load(req_cookies)
445-
446-
cookies = session_cookies
444+
all_cookies.load(req_cookies)
447445

448446
if proxy is not None:
449447
proxy = URL(proxy)
@@ -457,7 +455,7 @@ async def _request(
457455
req = self._request_class(
458456
method, url, params=params, headers=headers,
459457
skip_auto_headers=skip_headers, data=data,
460-
cookies=cookies, auth=auth, version=version,
458+
cookies=all_cookies, auth=auth, version=version,
461459
compress=compress, chunked=chunked,
462460
expect100=expect100, loop=self._loop,
463461
response_class=self._response_class,

tests/test_client_functional.py

+28
Original file line numberDiff line numberDiff line change
@@ -1919,6 +1919,34 @@ async def handler(request):
19191919
resp.close()
19201920

19211921

1922+
async def test_cookies_redirect(aiohttp_client) -> None:
1923+
1924+
async def redirect1(request):
1925+
ret = web.Response(status=301, headers={'Location': '/redirect2'})
1926+
ret.set_cookie('c', '1')
1927+
return ret
1928+
1929+
async def redirect2(request):
1930+
ret = web.Response(status=301, headers={'Location': '/'})
1931+
ret.set_cookie('c', '2')
1932+
return ret
1933+
1934+
async def handler(request):
1935+
assert request.cookies.keys() == {'c'}
1936+
assert request.cookies['c'] == '2'
1937+
return web.Response()
1938+
1939+
app = web.Application()
1940+
app.router.add_get('/redirect1', redirect1)
1941+
app.router.add_get('/redirect2', redirect2)
1942+
app.router.add_get('/', handler)
1943+
1944+
client = await aiohttp_client(app)
1945+
resp = await client.get('/redirect1')
1946+
assert 200 == resp.status
1947+
resp.close()
1948+
1949+
19221950
async def test_cookies_on_empty_session_jar(aiohttp_client) -> None:
19231951
async def handler(request):
19241952
assert 'custom-cookie' in request.cookies

0 commit comments

Comments
 (0)