Index: django/contrib/sessions/backends/base.py
===================================================================
--- django/contrib/sessions/backends/base.py	(revision 8187)
+++ django/contrib/sessions/backends/base.py	(working copy)
@@ -217,6 +217,15 @@
         """
         Saves the session data.
         """
+        # Avoid race conditions, see #6984. Make sure the session dict is
+        # loaded into memory before saving it back.
+        self._get_session()
+        self._save()
+
+    def _save(self):
+        """
+        The actual saving function that has to be overridden by backends.
+        """
         raise NotImplementedError
 
     def delete(self, session_key):
Index: django/contrib/sessions/backends/file.py
===================================================================
--- django/contrib/sessions/backends/file.py	(revision 8187)
+++ django/contrib/sessions/backends/file.py	(working copy)
@@ -60,7 +60,7 @@
             pass
         return session_data
 
-    def save(self):
+    def _save(self):
         try:
             f = open(self._key_to_file(self.session_key), "wb")
             try:
Index: django/contrib/sessions/backends/cache.py
===================================================================
--- django/contrib/sessions/backends/cache.py	(revision 8187)
+++ django/contrib/sessions/backends/cache.py	(working copy)
@@ -13,7 +13,7 @@
         session_data = self._cache.get(self.session_key)
         return session_data or {}
 
-    def save(self):
+    def _save(self):
         self._cache.set(self.session_key, self._session, self.get_expiry_age())
 
     def exists(self, session_key):
Index: django/contrib/sessions/backends/db.py
===================================================================
--- django/contrib/sessions/backends/db.py	(revision 8187)
+++ django/contrib/sessions/backends/db.py	(working copy)
@@ -36,7 +36,7 @@
             return False
         return True
 
-    def save(self):
+    def _save(self):
         Session.objects.create(
             session_key = self.session_key,
             session_data = self.encode(self._session),
