Skip to content

Commit 398b5ba

Browse files
amelchioasvetlov
authored andcommitted
Fix redirects with changing cookie values (#3576)
1 parent 049d861 commit 398b5ba

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
@@ -423,16 +423,14 @@ async def _request(
423423
"with AUTH argument or credentials "
424424
"encoded in URL")
425425

426-
session_cookies = self._cookie_jar.filter_cookies(url)
426+
all_cookies = self._cookie_jar.filter_cookies(url)
427427

428428
if cookies is not None:
429429
tmp_cookie_jar = CookieJar()
430430
tmp_cookie_jar.update_cookies(cookies)
431431
req_cookies = tmp_cookie_jar.filter_cookies(url)
432432
if req_cookies:
433-
session_cookies.load(req_cookies)
434-
435-
cookies = session_cookies
433+
all_cookies.load(req_cookies)
436434

437435
if proxy is not None:
438436
proxy = URL(proxy)
@@ -446,7 +444,7 @@ async def _request(
446444
req = self._request_class(
447445
method, url, params=params, headers=headers,
448446
skip_auto_headers=skip_headers, data=data,
449-
cookies=cookies, auth=auth, version=version,
447+
cookies=all_cookies, auth=auth, version=version,
450448
compress=compress, chunked=chunked,
451449
expect100=expect100, loop=self._loop,
452450
response_class=self._response_class,

tests/test_client_functional.py

+28
Original file line numberDiff line numberDiff line change
@@ -1884,6 +1884,34 @@ async def handler(request):
18841884
resp.close()
18851885

18861886

1887+
async def test_cookies_redirect(aiohttp_client) -> None:
1888+
1889+
async def redirect1(request):
1890+
ret = web.Response(status=301, headers={'Location': '/redirect2'})
1891+
ret.set_cookie('c', '1')
1892+
return ret
1893+
1894+
async def redirect2(request):
1895+
ret = web.Response(status=301, headers={'Location': '/'})
1896+
ret.set_cookie('c', '2')
1897+
return ret
1898+
1899+
async def handler(request):
1900+
assert request.cookies.keys() == {'c'}
1901+
assert request.cookies['c'] == '2'
1902+
return web.Response()
1903+
1904+
app = web.Application()
1905+
app.router.add_get('/redirect1', redirect1)
1906+
app.router.add_get('/redirect2', redirect2)
1907+
app.router.add_get('/', handler)
1908+
1909+
client = await aiohttp_client(app)
1910+
resp = await client.get('/redirect1')
1911+
assert 200 == resp.status
1912+
resp.close()
1913+
1914+
18871915
async def test_cookies_on_empty_session_jar(aiohttp_client) -> None:
18881916
async def handler(request):
18891917
assert 'custom-cookie' in request.cookies

0 commit comments

Comments
 (0)