That's a lot of code to implement instead of just using the SessionPageStatePersister, as mentioned in one of the comments. If using the built-in solution, consider the limitations:
Also, session state persistance will be notably slower in a heavily used server, especially if you're using out-of-process session state (as when using a server farm).
In some cases it may be worthwhile, especially if your users have a slow dial-up connection. If users have a fast connection then I'd just let them pay the price of ViewState in order to ease the load on the server.