That is basically right, yes. For session state, all you need to do is round trip some sort of pointer back to the user's session state information, so that is doable in either a cookie or query string. However, the ADFS logon token is the actual data and not a pointer to the data, so it is stored in a cookie. It is actually too big to fit in a query string in many cases, so using a gigantic query string might not work.
If you stored the data server side and just had the client maintain a pointer, you would need some sort of persistence mechanism like session state to store it, and that would require that the application support session state or something similar. That would be a big demand on the underlying application since session state tends to kill scalability and makes scale out more complicated, so that would be a difficult thing to impose on applications in general.