Search code examples
httpcookiesinterop

Should cookie values be URL encoded?


When setting cookies, PHP url-encodes the cookie value (at least when not using setrawcookie) and it url-decodes the cookie value before making it available to the application in $_COOKIE.

Is this an accepted standard? If I set a raw cookie value of a%3Db, would I get back a=b in most web programming languages (through their respective cookie-reading mechanisms)?


Solution

  • Yes. While it's not required per the spec, the following is mentioned in RFC6265 (emphasis is in the original document, not added)

    To maximize compatibility with user agents, servers that wish to store arbitrary data in a cookie-value SHOULD encode that data, for example, using Base64 [RFC4648].

    In my experience, most web frameworks and libraries for cookies have methods for encoding/decoding cookie values. In many cases, esp. in frameworks and high-level languages, this is abstracted away and done automatically.

    This answer provides a fairly detailed account of the history behind the values allowed in cookies. Might be of interest to you.