Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Implementing User Profiles in ASP.NET - A Beginner's Guide

0.00/5 (No votes)
4 Sep 2012 1  
This article discusses the basic of User Profiles. Why do we need user profiles and how to implement user profiles in ASP.NET.

Introduction

This article discusses the basic of User Profiles. Why do we need user profiles and how to implement user profiles in ASP.NET.

Background 

Websites that provide users a possibility to customize the look and feel of a website are often liked by the user. It gives a little personal touch to the web site from a users' perspective.  

ASP.NET themes is one way to provide users an option to change the appearance of the website. The other important aspect of it is remembering a returning user and show him a customized layout based on his preferences.  

User profiles are used to achieve the same. Using profiles we can remember the user between visits and display the appropriate layout/information to him.

Using the code

Understanding the Basics

To implement user profiles we need to specify a some things. Typical process of implementing User profiles will follow the below mentioned steps

  1. First we need to specify where the user profile will be saved. this can be done by specifying the Profile Provider.
  2. Once we have the Profile provider configured, we need to decide what information we need to save for the user i.e. we need to define the user profile.
  3. After this we need a mechanism to identify the user uniquely. This is easy if the user is a member of our site but it gets tricky when we want to track all the anonymous users too.
  4. Once we have identified the users uniquely we need to take his preferences and store them in our profile provider.
  5. Last but not the lease we need a way to identify the returning users and change the site's layout as per his saved preferences.

Let us now develop a small application that will remember the user's name and the time of his last visit. 

The default settings of profile is such that it will work only for authenticated users i.e. only for the members of the site. we will see how to do this for the anonymous users. then we will see how we can change this to use the authenticated users.

Note: This application will contain a single page website to demonstrate the User profiles. Typical real world usage of user profile will be on a larger scale and perhaps it will be used in conjunction with ASP.NET themes and/or web parts. 

Configuring the Profile Provider 

The profile provider specifies the store where the user preferences will be stored. Typically this is SqlServer database. This needs to be done in the web.config file. 

<profile>
	<providers>
		<add name="AspNetSqlProfileProvider" connectionStringName="LocalSqlServer" 
                applicationName="/" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
	</providers>		
</profile>

The settings above shows the default profile provider which is SqlServer database placed in the App_Data directory of the website. If we need to specify the custom profile provider then we need to specify the connectionString intead of connectionStringName to use the appropriate database.

Also, we need to set the database to accept and save the profile related data. this can be done by running the aspnet_regsql command against the database that needs to be used to save the profiles' data.

Specifying the User Profile Properties

Now we have the provider configured, we need to specify the data that we need to save for the users. We can do this by having the properties in the provider element of web.config. So let us create the entries in web.config to track the required information that we discussed above. 

<profile>
	<properties>
		<add name="Name" allowAnonymous="true"/>		
		<add name="VisitedOn" type="System.DateTime" allowAnonymous="true"/>			
	</properties>
</profile>

The allowAnonymous="true" specifies that the anonymous users should also be able to save their profile information. For this to work properly we need to specify <anonymousIdentification enabled="true"/> in the web.config file.

Once we are done with this we have successfully defined what all properties we need to track as the user profile information and it will work for authenticated as well as anonymous users.

Accessing and Saving the Profile information

Once we have done this the ASP.NET framework will create strongly type properties for each of our profile properties. If we need to access these profile properties we can use the Profile.<PropertyName> syntax to do so. If we need to access the properties we defined above all we need to do 

string name = Profile.Name;            
DateTime lastVisited = Profile.VisitedOn;

The other part of it is saving the Profile information. To do that we can simply assign the new values to these properties and make our changes permanent by calling Profile.Save(). Lets see how this can be done with our properties.

Profile.Name = TextBox1.Text;
Profile.VisitedOn = DateTime.Now;
Profile.Save();

The important thing to note while accessing the profiles is that if user has not saved his values yet then they will result the default values of their respective types.  

Get our sample Application to work

In the application that we are writing we will show the username and the time of his last visit. For the first visit both of them will be default values. From the next time onwards, if the user has saved his name then it will show the name otherwise it will simply show the time of last visit.

Let us see the design view of our page:

Now let us put all the above seen code to achieve the desired functionality, this is how our code behind will look like:

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack == false)
    {
        string name = Profile.Name;            
        DateTime lastVisited = Profile.VisitedOn;

        if (name == string.Empty)
        {
            //User has not specified his name
            Label1.Text = "Guest";
        }
        else
        {
            //returning user, show his name
            Label1.Text = name;
        }

        if (lastVisited.ToString() == "1/1/0001 12:00:00 AM")
        {
            Label2.Text = "Never";
        }
        else
        {
            Label2.Text = lastVisited.ToString();
        }
    }
}

protected void Page_UnLoad(object sender, EventArgs e)
{
    Profile.VisitedOn = DateTime.Now;
    Profile.Save();
}
protected void Button1_Click(object sender, EventArgs e)
{
    Profile.Name = TextBox1.Text;
    Profile.Save();
    Label1.Text = TextBox1.Text;
}

Let us now run the page for the first time:

Lets now save our preferences and run it again:

So this time we can see that it remembered the name I saved and also shows me the last access time. The User profiles have been configured and working fine now.

A note on Cookies

All the user profiles functionality that we have seen can also be done using cookies. Doing that will give complete control in developers hands. in fact ASP.NET actually uses cookies to track the visits of anonymous user. SO if we are saving the profiles for anonymous user and user decide to delete his cookies then his preferences will not be accessible to him i.e. he will not be identified as a returning user.

Points of Interest

User profiles provide a very good way of identifying the returning users. Cookies can also be used for the same thing. But using Profiles we don't have to write that much code that we would have to write if we use cookies. Also This approach is less error prone and using cookies. But I still think that knowing all about cookies in details is a very must thing for a web developer. Perhaps I will talk about cookies in a separate article. 

This article is written from the perspective of absolute beginners. I hope this has been informative.

History

  • 12 July 2012: First Version

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here