Ok here's my understanding of it: Every time we redirect on a new request a new instance of the necessary controller is generated. Thus a new instance variable is generated for that controller whenever a new request is processed. When we log out and set the key to nil, since we are redirecting, a new controller is generated with a new @current_user that must be set to nil because the key is similarly set to nil.