From d2d08c8cf6ed601d52e25cb8fc7944d39b5ed56e Mon Sep 17 00:00:00 2001 From: Hasan Ramezani Date: Fri, 4 Sep 2020 14:04:21 +0200 Subject: [PATCH] Fixed #31982 -- Made HttpResponse.set_cookie() cast max_age argument to an integer. --- django/http/response.py | 2 +- docs/ref/request-response.txt | 4 ++-- tests/responses/test_cookie.py | 5 +++++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/django/http/response.py b/django/http/response.py index c0ed93c44e..64ac205087 100644 --- a/django/http/response.py +++ b/django/http/response.py @@ -184,7 +184,7 @@ class HttpResponseBase: else: self.cookies[key]['expires'] = '' if max_age is not None: - self.cookies[key]['max-age'] = max_age + self.cookies[key]['max-age'] = int(max_age) # IE requires expires, so set it if hasn't been already. if not expires: self.cookies[key]['expires'] = http_date(time.time() + max_age) diff --git a/docs/ref/request-response.txt b/docs/ref/request-response.txt index 0256713822..6b3ec54dd5 100644 --- a/docs/ref/request-response.txt +++ b/docs/ref/request-response.txt @@ -834,8 +834,8 @@ Methods Sets a cookie. The parameters are the same as in the :class:`~http.cookies.Morsel` cookie object in the Python standard library. - * ``max_age`` should be a number of seconds, or ``None`` (default) if - the cookie should last only as long as the client's browser session. + * ``max_age`` should be an integer number of seconds, or ``None`` (default) + if the cookie should last only as long as the client's browser session. If ``expires`` is not specified, it will be calculated. * ``expires`` should either be a string in the format ``"Wdy, DD-Mon-YY HH:MM:SS GMT"`` or a ``datetime.datetime`` object diff --git a/tests/responses/test_cookie.py b/tests/responses/test_cookie.py index c7c35219b2..fd3a55442c 100644 --- a/tests/responses/test_cookie.py +++ b/tests/responses/test_cookie.py @@ -65,6 +65,11 @@ class SetCookieTests(SimpleTestCase): self.assertEqual(max_age_cookie['max-age'], 10) self.assertEqual(max_age_cookie['expires'], http_date(set_cookie_time + 10)) + def test_max_age_int(self): + response = HttpResponse() + response.set_cookie('max_age', max_age=10.6) + self.assertEqual(response.cookies['max_age']['max-age'], 10) + def test_httponly_cookie(self): response = HttpResponse() response.set_cookie('example', httponly=True)