Introduction
A quick and easy way to get the user's last login date before the ASP.NET framework updates it during the login process.
How it works
The idea is to catch the Authenticate message before the framework has a chance to do its thing. This will allow us to examine the user's properties before they are actually logged in. Therefore, we are getting the last login date before we authenticate them.
Once, we have a valid user, we store the date into a session variable for later use.
Setting up an example
- Create a new ASP.NET 2.0 project that uses the Membership Provider. There are lots of samples of this already.
- Add a login control to your default.aspx page. See the "Login Control" code section below.
- Verify that this works with your Membership Provider.
- Add the
OnAuthenticate
handler to the Login1
control. See "OnAuthenticate Handler" below.
- In your default.cs file, add the handler function for
OnAuthenticate
. See the "Authenticate Function" below.
Login control
Add this inside your Default.aspx page's <body>
tag:
<asp:Login ID="Login1" runat="server" VisibleWhenLoggedIn="False">
</asp:Login>
OnAuthenticate handler
After adding the OnAuthenticate
handler, your login control should look like:
<asp:Login ID="Login1" runat="server"
OnAuthenticate="Login1_Authenticate" VisibleWhenLoggedIn="False">
</asp:Login>
Authenticate function
Add the following code inside the partial class in default.cs:
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
Login login = (Login)sender;
MembershipUser user = Membership.GetUser(login.UserName);
if ( user != null )
{
DateTime dtLastLogin = user.LastLoginDate;
if (Membership.ValidateUser(login.UserName, login.Password))
{
Session["LastLoginDate"] = dtLastLogin;
e.Authenticated = true;
}
}
}
Conclusion
This is an easy but effective way to get the user's actual last login date.