I however disagree with most of the points made in the article, and use stateless JWT myself.
We use stateful JWT to "fail fast". That is, we can quickly reject invalid authentication, but we still look up the hash in the database before we actually use it. Our systems that do API and Auth are separate enough that the stateful/stateless distinction isn't useful.
Some people seem happy with a tiny amount of state to manage user sessions, which makes REST harder.
Other people use tokens of one flavor or another, which may have more security vulnerabilities than conventional sessions, although I'm not convinced.
Shared secret HMAC style is another alternative, although I'm not clear how to make that work with javascript clients in browsers.
Some people just throw the whole authentication question into headers and do basic auth.
For example, a message that's missing the `Content-Type` header, but includes a body, should be rejected because you can't be sure of the body's content type. If you're expected to infer this information, in order to understand the message, the system isn't adhering to the stateless constraint.
Cookies that have session IDs, that are then parsed and mapped to state on the server side, aren't violating the stateless constraint of REST because the message contains all information necessary to understand the message itself.