# Cookies and Uzbl # The speed of cookie lookups is important, since a single page load can involve dozens of HTTP requests, each of which needs a separate cookie lookup (since another instance of uzbl may have obtained new cookies for a site). It is possible handle cookie lookup (and storage) using a `spawn_async` cookie handler, but spawning new processes is inherently slow so a `talk_to_socket` cookie daemon (like the default uzbl-cookie-manager) is recommended. ## uzbl-cookie-manager ## uzbl-cookie-manager is a cookie daemon based on libsoup's SoupCookieJar. Cookies are stored in a file in the Mozilla cookies.txt format (default location $XDG_DATA_HOME/.local/share/cookies.txt). ### uzbl-cookie-manager Whitelist ### If a whitelist file is present (default location $XDG_CONFIG_HOME/uzbl/cookie_whitelist), then website attempts to set cookies will be ignored unless the site's domain is present in the whitelist. The whitelist can contain comment lines beginning with `#`, and domain lines. A domain line beginning with . will whitelist the given domain name and any subdomain of it. Otherwise only exact matches of the domain are whitelisted. For instance, given this whitelist file: example.com .uzbl.org uzbl-cookie-manager would accept cookies for example.com, uzbl.org and www.uzbl.org, but ignore cookies set for www.example.com (and any other domain that is not a subdomain of uzbl.org). ## uzbl-cookie-daemon ## uzbl-cookie-daemon is a Python cookie daemon based on Python's cookielib. Cookielib's lookup algorithm isn't very efficient for our needs, so uzbl-cookie-daemon is noticeably slow. ## Cookie Daemon Protocol ## When uzbl's `cookie_handler` variable is set to `talk_to_socket path`, uzbl connects to the Unix domain socket located at `path`. uzbl will send a cookie lookup request on this socket every time it makes an HTTP request. The format of this lookup request is: GET\0scheme\0host\0path\0 where `\0` is the null character, `scheme` is the URL scheme (http or https), `host` is the hostname from the URL and `path` is the requested path. The cookie daemon should respond with the names and values of cookies that match the request, in the format used by the `Cookie` header, terminated with a `\0`. When a website adds, deletes or changes a cookie, uzbl notifies the cookie daemon with a request in the format: PUT\0scheme\0host\0path\0name=value\0 where `scheme`, `host` and `path` are (approximately) as above, and `name=value` is the cookie name-value pair to store. The cookie daemon should respond by writing `\0` to the socket.