'Stores the messages to a cookie, returning a list of any messages which
could not be stored.
If the encoded data is larger than ``max_cookie_size``, removes
messages until the data fits (these are the messages which are
returned), and add the not_finished sentinel value to indicate as much.'

def _store(self, messages, response, remove_oldest=True, *args, **kwargs):

    unstored_messages = []
    encoded_data = self._encode(messages)
    if self.max_cookie_size:
        cookie = SimpleCookie()
        def stored_length(val):
            return len(cookie.value_encode(val)[1])
        while (encoded_data and (stored_length(encoded_data) > self.max_cookie_size)):
            if remove_oldest:
                unstored_messages.append(messages.pop(0))
            else:
                unstored_messages.insert(0, messages.pop())
            encoded_data = self._encode((messages + [self.not_finished]), encode_empty=unstored_messages)
    self._update_cookie(encoded_data, response)
    return unstored_messages
