Ticket #8122: 8122-rmaster.diff
File 8122-rmaster.diff, 7.9 KB (added by , 10 years ago) |
---|
-
django/contrib/sessions/backends/base.py
diff --git a/django/contrib/sessions/backends/base.py b/django/contrib/sessions/backends/base.py index 3b24b8d..d734351 100644
a b class SessionBase(object): 32 32 """ 33 33 Base class for all Session classes. 34 34 """ 35 TEST_COOKIE_NAME = 'testcookie'36 TEST_COOKIE_VALUE = 'worked'37 35 38 36 def __init__(self, session_key=None): 39 37 self._session_key = session_key 40 38 self.accessed = False 41 39 self.modified = False 40 self.cookie_received = (session_key is not None) 42 41 self.serializer = import_string(settings.SESSION_SERIALIZER) 43 42 44 43 def __contains__(self, key): … … class SessionBase(object): 71 70 return value 72 71 73 72 def set_test_cookie(self): 74 self[self.TEST_COOKIE_NAME] = self.TEST_COOKIE_VALUE 73 from warnings import warn 74 warn('set_test_cookie() is deprecated. It is no longer required.') 75 75 76 76 def test_cookie_worked(self): 77 return self.get(self.TEST_COOKIE_NAME) == self.TEST_COOKIE_VALUE 77 from warnings import warn 78 warn('test_cookie_worked() is deprecated. Use request.cookie_received') 79 return self.cookie_received 78 80 79 81 def delete_test_cookie(self): 80 del self[self.TEST_COOKIE_NAME] 82 from warnings import warn 83 warn('delete_test_cookie() is deprecated. It is no longer required.') 81 84 82 85 def _hash(self, value): 83 86 key_salt = "django.contrib.sessions" + self.__class__.__name__ -
django/contrib/sessions/middleware.py
diff --git a/django/contrib/sessions/middleware.py b/django/contrib/sessions/middleware.py index 69ca669..f1af3de 100644
a b class SessionMiddleware(object): 36 36 if accessed: 37 37 patch_vary_headers(response, ('Cookie',)) 38 38 if modified or settings.SESSION_SAVE_EVERY_REQUEST: 39 if request.session.get_expire_at_browser_close(): 40 max_age = None 41 expires = None 42 else: 43 max_age = request.session.get_expiry_age() 44 expires_time = time.time() + max_age 45 expires = cookie_date(expires_time) 46 # Save the session data and refresh the client cookie. 47 # Skip session save for 500 responses, refs #3881. 48 if response.status_code != 500: 49 request.session.save() 50 response.set_cookie(settings.SESSION_COOKIE_NAME, 51 request.session.session_key, max_age=max_age, 52 expires=expires, domain=settings.SESSION_COOKIE_DOMAIN, 53 path=settings.SESSION_COOKIE_PATH, 54 secure=settings.SESSION_COOKIE_SECURE or None, 55 httponly=settings.SESSION_COOKIE_HTTPONLY or None) 39 # Save the session data and refresh the client cookie 40 request.session.save() 41 self.set_session_cookie(request, response, 42 request.session.session_key) 43 elif not request.session.cookie_received: 44 # Set a temporary cookie 45 self.set_session_cookie(request, response, '') 46 56 47 return response 48 49 def set_session_cookie(self, request, response, value): 50 if request.session.get_expire_at_browser_close(): 51 max_age = None 52 expires = None 53 else: 54 max_age = request.session.get_expiry_age() 55 expires_time = time.time() + max_age 56 expires = cookie_date(expires_time) 57 response.set_cookie(settings.SESSION_COOKIE_NAME, value, 58 max_age=max_age, expires=expires, 59 domain=settings.SESSION_COOKIE_DOMAIN, 60 path=settings.SESSION_COOKIE_PATH, 61 secure=settings.SESSION_COOKIE_SECURE or None) -
new file tests/regressiontests/sessions_regress/models.py
diff --git a/tests/regressiontests/sessions_regress/models.py b/tests/regressiontests/sessions_regress/models.py new file mode 100644 index 0000000..71abcc5
- + 1 # models.py file for tests to run. -
new file tests/regressiontests/sessions_regress/tests.py
diff --git a/tests/regressiontests/sessions_regress/tests.py b/tests/regressiontests/sessions_regress/tests.py new file mode 100644 index 0000000..8f68963
- + 1 # -*- coding: utf-8 -*- 2 3 from django.test import TestCase 4 from django.http import HttpRequest, HttpResponse 5 from django.contrib.sessions.middleware import SessionMiddleware 6 from django.conf import settings 7 8 class SessionMiddlewareTest(TestCase): 9 def test_no_cookie(self): 10 """ 11 Tests that the session middleware works when the client does not send 12 a session cookie. 13 """ 14 middleware = SessionMiddleware() 15 request = HttpRequest() 16 middleware.process_request(request) 17 assert not request.session.cookie_received 18 response = middleware.process_response(request, HttpResponse()) 19 assert settings.SESSION_COOKIE_NAME in response.cookies 20 assert response.cookies[settings.SESSION_COOKIE_NAME].value == '' 21 22 def test_empty_cookie(self): 23 """ 24 Tests that the session middleware works when the client sends an empty 25 session cookie. 26 """ 27 middleware = SessionMiddleware() 28 request = HttpRequest() 29 request.COOKIES[settings.SESSION_COOKIE_NAME] = '' 30 middleware.process_request(request) 31 assert request.session.cookie_received 32 response = middleware.process_response(request, HttpResponse()) 33 assert not settings.SESSION_COOKIE_NAME in response.cookies 34 35 def test_valid_cookie(self): 36 """ 37 Tests that the session middleware works when the client sends a valid 38 session cookie. 39 """ 40 # First get valid session id 41 middleware = SessionMiddleware() 42 request = HttpRequest() 43 middleware.process_request(request) 44 request.session['test'] = 'test' 45 response = middleware.process_response(request, HttpResponse()) 46 sessionid = response.cookies[settings.SESSION_COOKIE_NAME].value 47 assert sessionid != '' 48 # Now check behavior for valid session id 49 request = HttpRequest() 50 request.COOKIES[settings.SESSION_COOKIE_NAME] = sessionid 51 middleware.process_request(request) 52 assert request.session.cookie_received 53 assert request.session['test'] == 'test' 54 response = middleware.process_response(request, HttpResponse()) 55 assert not settings.SESSION_COOKIE_NAME in response.cookies 56 57 def test_invalid_cookie(self): 58 """ 59 Tests that the session middleware works when the client sends an 60 invalid session cookie. 61 """ 62 # First get valid session id 63 middleware = SessionMiddleware() 64 request = HttpRequest() 65 middleware.process_request(request) 66 request.session['test'] = 'test' 67 response = middleware.process_response(request, HttpResponse()) 68 sessionid = response.cookies[settings.SESSION_COOKIE_NAME].value 69 assert sessionid != '' 70 # Now check behavior for invalid session id 71 request = HttpRequest() 72 request.COOKIES[settings.SESSION_COOKIE_NAME] = 'invalid' 73 middleware.process_request(request) 74 assert request.session.cookie_received 75 assert 'test' not in request.session 76 response = middleware.process_response(request, HttpResponse()) 77 assert settings.SESSION_COOKIE_NAME in response.cookies 78 assert response.cookies[settings.SESSION_COOKIE_NAME] != '' 79 assert response.cookies[settings.SESSION_COOKIE_NAME] != sessionid