Sessions are associated with a browser, not with a logged-on user.
I suppose you could write a custom session provider that uses the logged-on user ID as the session ID, but that's not how the default implementation works.
This is yet another reason why it's a good idea to avoid sessions if you can. Better to use cookies, Cache, SQL Server, etc when possible. If you can't avoid Session, or you need to be able to persist per-user data to disk in between page requests, then you might consider doing something like using the user name or ID as a key to the Session object (off the top of my head; not tested):
if (this.Context.User.Identity.IsAuthenticated)
{
string key = this.Context.User.Identity.Name;
this.Session[key] = "my user-specific data";
}
and of course, you can do things append unique strings to the initial key to support multiple values. You can also use this to make a transition from being an anonymous user to one who is logged-in.
With this approach, if a user logs-out, it's probably a good idea to clean up or abandon the Session object, just so it doesn't grow without bound.
Check out my
book (now in stock at Amazon):
Ultra-Fast ASP.NET: Build Ultra-Fast and Ultra-Scalable web sites using ASP.NET and SQL Server