Index: django/contrib/sessions/context_processors.py
===================================================================
--- django/contrib/sessions/context_processors.py	(revision 0)
+++ django/contrib/sessions/context_processors.py	(revision 0)
@@ -0,0 +1,7 @@
+def visitor_messages(request):
+    """
+    Returns any messages in the session's message queue.
+    """
+    return {
+        'visitor_messages': request.session.get_and_delete_messages(),
+    }
Index: django/contrib/sessions/tests.py
===================================================================
--- django/contrib/sessions/tests.py	(revision 6373)
+++ django/contrib/sessions/tests.py	(working copy)
@@ -14,6 +14,19 @@
 'dog'
 >>> db_session.pop('some key', 'does not exist')
 'does not exist'
+>>> db_session.get_messages()
+[]
+>>> db_session.create_message('first post')
+>>> db_session.get_messages()
+['first post']
+>>> db_session.get_and_delete_messages()
+['first post']
+>>> db_session.get_and_delete_messages()
+[]
+>>> db_session.create_message('hello')
+>>> db_session.create_message('world')
+>>> db_session.get_and_delete_messages()
+['hello', 'world']
 >>> db_session.save()
 >>> db_session.exists(db_session.session_key)
 True
@@ -31,6 +44,19 @@
 'dog'
 >>> file_session.pop('some key', 'does not exist')
 'does not exist'
+>>> file_session.get_messages()
+[]
+>>> file_session.create_message('first post')
+>>> file_session.get_messages()
+['first post']
+>>> file_session.get_and_delete_messages()
+['first post']
+>>> file_session.get_and_delete_messages()
+[]
+>>> file_session.create_message('hello')
+>>> file_session.create_message('world')
+>>> file_session.get_and_delete_messages()
+['hello', 'world']
 >>> file_session.save()
 >>> file_session.exists(file_session.session_key)
 True
@@ -48,6 +74,19 @@
 'dog'
 >>> cache_session.pop('some key', 'does not exist')
 'does not exist'
+>>> cache_session.get_messages()
+[]
+>>> cache_session.create_message('first post')
+>>> cache_session.get_messages()
+['first post']
+>>> cache_session.get_and_delete_messages()
+['first post']
+>>> cache_session.get_and_delete_messages()
+[]
+>>> cache_session.create_message('hello')
+>>> cache_session.create_message('world')
+>>> cache_session.get_and_delete_messages()
+['hello', 'world']
 >>> cache_session.save()
 >>> cache_session.delete(cache_session.session_key)
 >>> cache_session.exists(cache_session.session_key)
Index: django/contrib/sessions/backends/base.py
===================================================================
--- django/contrib/sessions/backends/base.py	(revision 6373)
+++ django/contrib/sessions/backends/base.py	(working copy)
@@ -18,7 +18,8 @@
     """
 
     TEST_COOKIE_NAME = 'testcookie'
-    TEST_COOKIE_VALUE = 'worked'
+    TEST_COOKIE_VALUE = 'worked'
+    MESSAGES_NAME = '_messages'
 
     def __init__(self, session_key=None):
         self._session_key = session_key
@@ -59,7 +60,21 @@
 
     def delete_test_cookie(self):
         del self[self.TEST_COOKIE_NAME]
-        
+
+    def get_messages(self): 
+        return self.get(self.MESSAGES_NAME, []) 
+
+    def get_and_delete_messages(self): 
+        return self.pop(self.MESSAGES_NAME, []) 
+
+    def create_message(self, message): 
+        messages = self.get(self.MESSAGES_NAME) 
+        if messages is None: 
+            messages = [] 
+            self[self.MESSAGES_NAME] = messages 
+        messages.append(message) 
+        self.modified = True 
+
     def encode(self, session_dict):
         "Returns the given session dictionary pickled and encoded as a string."
         pickled = pickle.dumps(session_dict, pickle.HIGHEST_PROTOCOL)
Index: docs/sessions.txt
===================================================================
--- docs/sessions.txt	(revision 6373)
+++ docs/sessions.txt	(working copy)
@@ -190,6 +190,57 @@
                 return HttpResponse("Please enable cookies and try again.")
         request.session.set_test_cookie()
         return render_to_response('foo/login_form.html')
+
+Visitor Messages
+================
+
+**New in Django development version**
+
+The session message system provides a simple way to queue messages for
+all (anonymous or authenticated) site visitors. To associate messages with users 
+in the user database, use the `authentication message framework`_.
+
+.. _authentication message framework: ../authentication/#messages
+
+Messages are associated with a session, therefore a message only lasts as long
+as a session is valid (see `browser-length sessions vs. persistent sessions`_).
+
+The message system relies on the session middleware and is accessed via
+``request.session``. The API is simple:
+
+    * To create a new message, use
+      ``request.session.create_message(message='message text').``
+
+    * To retreive the messages, use ``request.session.get_messages()``,
+      which returns a list of any messages (strings) in the session's queue.
+
+    * To retrieve and delete messages, use
+      ``user_obj.get_and_delete_messages()``, which returns the list of any
+      messages in the session's queue and then deletes the messages from the
+      queue.
+
+django.contrib.sessions.context_processors.visitor_messages
+-----------------------------------------------------------
+
+This `context processor`_ is provided (but not installed by default) which makes
+these messages available to the template context as the template variable
+``{{ visitor_messages }}`` when you use ``RequestContext``.
+
+.. _context processor: ../templates_python/#subclassing-context-requestcontext
+
+Here's an example of template code that displays messages::
+
+	{% if visitor_messages %}
+	<ul>
+	    {% for message in visitor_messages %}
+	    <li>{{ message|escape }}</li>
+	    {% endfor %}
+	</ul>
+	{% endif %}
+
+Note that when this context processor is accessed by ``RequestContext``, 
+``get_and_delete_messages`` is called behind the scenes, so any messages will
+be deleted even if you don't display them.
 
 Using sessions out of views
 ===========================
Index: docs/authentication.txt
===================================================================
--- docs/authentication.txt	(revision 6373)
+++ docs/authentication.txt	(working copy)
@@ -947,7 +947,7 @@
 Finally, note that this messages framework only works with users in the user
 database. To send messages to anonymous users, use the `session framework`_.
 
-.. _session framework: ../sessions/
+.. _session framework: ../sessions/#visitor-messages
 
 Other authentication sources
 ============================
