Index: django/contrib/sessions/tests.py
===================================================================
--- django/contrib/sessions/tests.py	(revision 7360)
+++ django/contrib/sessions/tests.py	(working copy)
@@ -3,6 +3,7 @@
 >>> from django.conf import settings
 >>> from django.contrib.sessions.backends.db import SessionStore as DatabaseSession
 >>> from django.contrib.sessions.backends.cache import SessionStore as CacheSession
+>>> from django.contrib.sessions.backends.cached_db import SessionStore as CacheDBSession 
 >>> from django.contrib.sessions.backends.file import SessionStore as FileSession
 >>> from django.contrib.sessions.backends.base import SessionBase
 
@@ -23,6 +24,23 @@
 >>> db_session.exists(db_session.session_key)
 False
 
+>>> cdb_session = CacheDBSession()
+>>> cdb_session.modified
+False
+>>> cdb_session['cat'] = "dog" 
+>>> cdb_session.modified 
+True
+>>> cdb_session.pop('cat')
+'dog'
+>>> cdb_session.pop('some key', 'does not exist')
+'does not exist'
+>>> cdb_session.save()
+>>> cdb_session.exists(cdb_session.session_key)
+True
+>>> cdb_session.delete(cdb_session.session_key)
+>>> cdb_session.exists(cdb_session.session_key)
+False
+
 >>> file_session = FileSession()
 >>> file_session.modified
 False
Index: django/contrib/sessions/backends/cached_db.py
===================================================================
--- django/contrib/sessions/backends/cached_db.py	(revision 0)
+++ django/contrib/sessions/backends/cached_db.py	(revision 0)
@@ -0,0 +1,32 @@
+from django.conf import settings 
+from django.contrib.sessions.backends.db import SessionStore as DBStore
+from django.core.cache import cache 
+ 
+class SessionStore(DBStore): 
+    """ 
+    Implements cached database session store 
+    """ 
+    def __init__(self, session_key=None): 
+        super(SessionStore, self).__init__(session_key) 
+ 
+    def _get_cache_key(self): 
+        return 'django_session_backend_cache_%s' % (self.session_key) 
+     
+    def load(self): 
+        cache_key = self._get_cache_key()
+        data = cache.get(cache_key, None) 
+        if data is None: 
+            data = super(SessionStore, self).load()
+            cache.set(cache_key, data, settings.SESSION_COOKIE_AGE) 
+        return data 
+             
+    def exists(self, session_key): 
+        return super(SessionStore, self).exists(session_key)
+             
+    def save(self): 
+        super(SessionStore, self).save()
+        cache.set(self._get_cache_key(), self._session, settings.SESSION_COOKIE_AGE) 
+     
+    def delete(self, session_key): 
+        super(SessionStore, self).delete(session_key)
+        cache.delete(self._get_cache_key()) 
Index: docs/sessions.txt
===================================================================
--- docs/sessions.txt	(revision 7360)
+++ docs/sessions.txt	(working copy)
@@ -53,23 +53,29 @@
 where Django stores session files. Be sure to check that your Web server has
 permissions to read and write to this location.
 
-Using cache-based sessions
---------------------------
+Using cached sessions
+---------------------
 
-To store session data using Django's cache system, set ``SESSION_ENGINE``
-to ``"django.contrib.sessions.backends.cache"``. You'll want to make sure
-you've configured your cache; see the `cache documentation`_ for details.
+There are two cache backends for Django.  Setting ``SESSION_ENGINE`` to 
+``"django.contrib.sessions.backends.cache"`` uses a simple caching session 
+store, while ``"django.contrib.sessions.backends.cached_db"`` uses a 
+write-through cache.  In a write-through cache, every write to the cache 
+causes a write to the backing store, while reads only use the backing store
+on a cache miss.  Both session stores offer high performance, but the simple
+cache store trades more performance for persistence.
 
+You'll want to make sure you've configured your cache; see the 
+`cache documentation`_ for details.
+
 .. _cache documentation: ../cache/
 
 .. note::
+     If you decide to use the ``cache`` session store, you should 
+     probably only use the memcached cache backend. The local memory and simple 
+     cache backends don't retain data long enough to be good choices; It'll be 
+     faster to use file or database sessions directly instead of sending 
+     everything through the file or database cache backends.
 
-    You should probably only use cache-based sessions if you're using the
-    memcached cache backend. The local memory and simple cache backends
-    don't retain data long enough to be good choices, and it'll be faster
-    to use file or database sessions directly instead of sending everything
-    through the file or database cache backends.
-
 Using sessions in views
 =======================
 
