The session timeout is at the default of 120 minutes; but after 120 minutes the user will clicks an option and the routing doesn't send them to the login page but to the requested page, this is where the session variable doesn't exists. The session variable is a custom variable; the system thinks the user is still active but the session variables are gone.
Very confusing. I alway thought they were one in the same.
They are the same, they're being sent to a stagnant page for example if they try to do something that requires Authentication then they will be redirected to login page.
session duration IS what controls the user's log in state. They cannot be logged in and not have a valid session, although they could be on a page that looks like they are logged in but they are not doing anything with it.
If the user clicks on a link and is directed to the page then you are not correctly protecting the route.
If the user has Remember Me checked when they click on the protected route they will be logged in automatically behind the scenes and sent to the requested page.
If you are setting the session variable as part of the login process then you need to consider the remember-me scenario. In this case you should set the session on Login event not the controller.