Skip to content

Commit

Permalink
[3.5] Fix redirects with changing cookie values (#3576) (#3626)
Browse files Browse the repository at this point in the history
(cherry picked from commit 398b5ba)

Co-authored-by: Anders Melchiorsen <[email protected]>
  • Loading branch information
asvetlov and amelchio authored May 8, 2019
1 parent 5645dee commit 4d04b9b
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 5 deletions.
1 change: 1 addition & 0 deletions CHANGES/3576.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix an issue where cookies would sometimes not be set during a redirect.
1 change: 1 addition & 0 deletions CONTRIBUTORS.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ Alexey Popravka
Alexey Stepanov
Amin Etesamian
Amy Boyle
Anders Melchiorsen
Andrei Ursulenko
Andrej Antonov
Andrew Leech
Expand Down
8 changes: 3 additions & 5 deletions aiohttp/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -434,16 +434,14 @@ async def _request(
"with AUTH argument or credentials "
"encoded in URL")

session_cookies = self._cookie_jar.filter_cookies(url)
all_cookies = self._cookie_jar.filter_cookies(url)

if cookies is not None:
tmp_cookie_jar = CookieJar()
tmp_cookie_jar.update_cookies(cookies)
req_cookies = tmp_cookie_jar.filter_cookies(url)
if req_cookies:
session_cookies.load(req_cookies)

cookies = session_cookies
all_cookies.load(req_cookies)

if proxy is not None:
proxy = URL(proxy)
Expand All @@ -457,7 +455,7 @@ async def _request(
req = self._request_class(
method, url, params=params, headers=headers,
skip_auto_headers=skip_headers, data=data,
cookies=cookies, auth=auth, version=version,
cookies=all_cookies, auth=auth, version=version,
compress=compress, chunked=chunked,
expect100=expect100, loop=self._loop,
response_class=self._response_class,
Expand Down
28 changes: 28 additions & 0 deletions tests/test_client_functional.py
Original file line number Diff line number Diff line change
Expand Up @@ -1919,6 +1919,34 @@ async def handler(request):
resp.close()


async def test_cookies_redirect(aiohttp_client) -> None:

async def redirect1(request):
ret = web.Response(status=301, headers={'Location': '/redirect2'})
ret.set_cookie('c', '1')
return ret

async def redirect2(request):
ret = web.Response(status=301, headers={'Location': '/'})
ret.set_cookie('c', '2')
return ret

async def handler(request):
assert request.cookies.keys() == {'c'}
assert request.cookies['c'] == '2'
return web.Response()

app = web.Application()
app.router.add_get('/redirect1', redirect1)
app.router.add_get('/redirect2', redirect2)
app.router.add_get('/', handler)

client = await aiohttp_client(app)
resp = await client.get('/redirect1')
assert 200 == resp.status
resp.close()


async def test_cookies_on_empty_session_jar(aiohttp_client) -> None:
async def handler(request):
assert 'custom-cookie' in request.cookies
Expand Down

0 comments on commit 4d04b9b

Please sign in to comment.