Index: django/contrib/sessions/tests.py
===================================================================
--- django/contrib/sessions/tests.py	(revisión: 6596)
+++ django/contrib/sessions/tests.py	(copia de trabajo)
@@ -15,6 +15,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
@@ -32,6 +45,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
@@ -49,6 +75,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	(revisión: 6596)
+++ django/contrib/sessions/backends/base.py	(copia de trabajo)
@@ -18,6 +18,7 @@
     """
     TEST_COOKIE_NAME = 'testcookie'
     TEST_COOKIE_VALUE = 'worked'
+    MESSAGES_NAME = '_messages'
 
     def __init__(self, session_key=None):
         self._session_key = session_key
@@ -60,6 +61,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: django/contrib/sessions/context_processors.py
===================================================================
--- django/contrib/sessions/context_processors.py	(revisión: 0)
+++ django/contrib/sessions/context_processors.py	(revisión: 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: docs/sessions.txt
===================================================================
--- docs/sessions.txt	(revisión: 6596)
+++ docs/sessions.txt	(copia de trabajo)
@@ -191,6 +191,57 @@
         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	(revisión: 6596)
+++ docs/authentication.txt	(copia de trabajo)
@@ -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
 ============================
