mirror of
https://github.com/django/django.git
synced 2025-06-05 03:29:12 +00:00
[1.11.x] Fixed #28066 -- Prevented SessionBase.cycle_key() from discarding data.
Backport of dda596ca3296f5b2574cf4876a4e176594f52834 from master
This commit is contained in:
parent
844ae40a7c
commit
5d556d2aaf
@ -306,10 +306,7 @@ class SessionBase(object):
|
|||||||
"""
|
"""
|
||||||
Creates a new session key, while retaining the current session data.
|
Creates a new session key, while retaining the current session data.
|
||||||
"""
|
"""
|
||||||
try:
|
data = self._session
|
||||||
data = self._session_cache
|
|
||||||
except AttributeError:
|
|
||||||
data = {}
|
|
||||||
key = self.session_key
|
key = self.session_key
|
||||||
self.create()
|
self.create()
|
||||||
self._session_cache = data
|
self._session_cache = data
|
||||||
|
@ -74,9 +74,8 @@ class SessionStore(SessionBase):
|
|||||||
generate a secure url-safe Base64-encoded string of data as our
|
generate a secure url-safe Base64-encoded string of data as our
|
||||||
session key.
|
session key.
|
||||||
"""
|
"""
|
||||||
session_cache = getattr(self, '_session_cache', {})
|
|
||||||
return signing.dumps(
|
return signing.dumps(
|
||||||
session_cache, compress=True,
|
self._session, compress=True,
|
||||||
salt='django.contrib.sessions.backends.signed_cookies',
|
salt='django.contrib.sessions.backends.signed_cookies',
|
||||||
serializer=self.serializer,
|
serializer=self.serializer,
|
||||||
)
|
)
|
||||||
|
@ -27,3 +27,6 @@ Bugfixes
|
|||||||
|
|
||||||
* Restored ``BoundField``\s without any ``choices`` evaluating to ``True``
|
* Restored ``BoundField``\s without any ``choices`` evaluating to ``True``
|
||||||
(:ticket:`28058`).
|
(:ticket:`28058`).
|
||||||
|
|
||||||
|
* Prevented ``SessionBase.cycle_key()`` from losing session data if
|
||||||
|
``_session_cache`` isn't populated (:ticket:`28066`).
|
||||||
|
@ -189,8 +189,13 @@ class SessionTestsMixin(object):
|
|||||||
self.assertEqual(list(self.session.items()), prev_data)
|
self.assertEqual(list(self.session.items()), prev_data)
|
||||||
|
|
||||||
def test_cycle_with_no_session_cache(self):
|
def test_cycle_with_no_session_cache(self):
|
||||||
|
self.session['a'], self.session['b'] = 'c', 'd'
|
||||||
|
self.session.save()
|
||||||
|
prev_data = list(self.session.items())
|
||||||
|
self.session = self.backend(self.session.session_key)
|
||||||
self.assertFalse(hasattr(self.session, '_session_cache'))
|
self.assertFalse(hasattr(self.session, '_session_cache'))
|
||||||
self.session.cycle_key()
|
self.session.cycle_key()
|
||||||
|
self.assertEqual(list(self.session.items()), prev_data)
|
||||||
|
|
||||||
def test_save_doesnt_clear_data(self):
|
def test_save_doesnt_clear_data(self):
|
||||||
self.session['a'] = 'b'
|
self.session['a'] = 'b'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user