Creating an IUserSession that is used throughout my code
It's great that you separated the ASP.NET specific implementation from the interface. Two things to watch:


Don't forget to call Session.Abandon();Session.Clear(); in the Logout method.
SetupProfile contains a lot of code. This seems like business logic to me. Try to extract this code to its own class. An IUserService for instance. Or perhaps explicitly define Query Objects.