def test_set_cookie_encoded(self): local.current_handler = handler = RequestHandler(self._get_app(), Request.from_values()) store = SessionStore(handler) store.set_cookie('foo', 'bar', format='json') store.set_cookie('baz', 'ding', format='json') response = Response() store.save(response) headers = {'Cookie': '\n'.join(response.headers.getlist('Set-Cookie'))} request = Request.from_values('/', headers=headers) self.assertEqual(json_b64decode(request.cookies.get('foo')), 'bar') self.assertEqual(json_b64decode(request.cookies.get('baz')), 'ding')
def get_cookie(self, request, name, max_age=None): """Returns the given signed cookie if it validates, or None. :param request: A :class:`tipfy.Request` object. :param name: Cookie name. :param max_age: Maximum age in seconds for a valid cookie. If the cookie is older than this, returns None. """ value = request.cookies.get(name) if not value: return parts = value.split('|') if len(parts) != 3: return signature = self._get_signature(name, parts[0], parts[1]) if not self._check_signature(parts[2], signature): logging.warning('Invalid cookie signature %r', value) return if max_age is not None and (int(parts[1]) < time.time() - max_age): logging.warning('Expired cookie %r', value) return try: return json_b64decode(parts[0]) except: logging.warning('Cookie value failed to be decoded: %r', parts[0]) return