Cookies

Cookie support is available in Falcon version 0.3 or later.

Getting Cookies

Cookies can be read from a request via the cookies request attribute:

class Resource(object):
    def on_get(self, req, resp):

        cookies = req.cookies

        if "my_cookie" in cookies:
            my_cookie_value = cookies["my_cookie"]
        # ....

The cookies attribute is a regular dict object.

Tip

cookies returns a copy of the response cookie dict. Assign it to a variable as in the above example for better performance.

Setting Cookies

Setting cookies on a response is done via the set_cookie().

You should use set_cookie() instead of set_header() or append_header().

With set_header() you cannot set multiple headers with the same name (which is how multiple cookies are sent to the client).

append_header() appends multiple values to the same header field, which is not compatible with the format used by Set-Cookie headers to send cookies to clients.

Simple example:

class Resource(object):
    def on_get(self, req, resp):
        # Set the cookie "my_cookie" to the value "my cookie value"
        resp.set_cookie("my_cookie", "my cookie value")

You can of course also set the domain, path and lifetime of the cookie.

class Resource(object):
    def on_get(self, req, resp):
        # Set the 'max-age' of the cookie to 10 minutes (600 seconds)
        # and the cookies domain to "example.com"
        resp.set_cookie("my_cookie", "my cookie value",
                        max_age=600, domain="example.com")

If you set a cookie and want to get rid of it again, you can use the unset_cookie():

class Resource(object):
    def on_get(self, req, resp):
        resp.set_cookie("bad_cookie", ":(")
        # clear the bad cookie
        resp.unset_cookie("bad_cookie")