There are a few way to skin this cat, but I'd argue that attaching profile information to the user would be the most elegant.
You'll need a Profile Provider that will persist your user's profile data. You can use the SqlProfileProvider for SQL Server, but I'd recommend looking at the Microsoft ASP.NET Universal Providers ref: http://www.nuget.org/packages/Microsoft.AspNet.Providers
Some shameless copy and paste from Scott Hanselman follows. Let's say you want to track a user's birthday:
public class MyCustomProfile : ProfileBase
{
public DateTime? Birthdate {
get { return this["Birthdate"] as DateTime?; }
set { this["Birthdate"] = value; }
}
}
Then you'd set it up in your web.config:
<profile inherits="MyApp.Models.MyCustomProfile" defaultprovider="DefaultProfileProvider"></profile>
Finally, you can pull in the custom profile of the current user with:
var customProfile = HttpContext.Profile as MyCustomProfile;
DateTime? birthday = customProfile.Birthdate;
You'll have to set up your data store, but that's mostly what needs to be done. You can find the full nitty-gritty at Scott Hanselman's blog: http://www.hanselman.com/blog/IntroducingSystemWebProvidersASPNETUniversalProvidersForSessionMembershipRolesAndUserProfileOnSQLCompactAndSQLAzure.aspx