I've used the following sample code which i located on another site to prevent a user from logging in twice which works great with one exception that when a user closes the browser or signsout and goes to log back into it tells the user that they are already logged in because the Cache is set to expire to my sessionstates timeout value listed at the bottom, so until the cache expires they are not able to log back in

What i need is a way to expire the cache key thats being set and an event to trigger that from when the browser closes

Here's all my code that prevents a user from logging in twice

**This code is located in my login controls loggingin event
protected void Login1_LoggingIn(object sender, LoginCancelEventArgs e)
        //validate your user here (Forms Auth or Database, for example)
        // this could be a new "illegal" logon, so we need to check
        // if these credentials are already in the Cache 
        string sKey = Login1.UserName + Login1.Password;
        string sUser = Convert.ToString(Cache[sKey]);
        if (sUser == null || sUser == String.Empty)
            // No Cache item, so sesion is either expired or user is new sign-on
            // Set the cache item and Session hit-test for this user---
            TimeSpan SessTimeOut = new TimeSpan(0, 0, HttpContext.Current.Session.Timeout, 0, 0);
            HttpContext.Current.Cache.Insert(sKey, sKey, null, DateTime.MaxValue, SessTimeOut,
               System.Web.Caching.CacheItemPriority.NotRemovable,   null);
            Session["user"] = Login1.UserName + Login1.Password; ;
            // cache item exists, so too bad...
            Login1.InstructionText = "You are already logged in!!!";
            e.Cancel = true;
**This code is located in my Global.asax file
protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e)
        // Let's write a message to show this got fired---
        //Response.Write("SessionID: " + Session.SessionID.ToString() + "User key: " + (string)Session["user"]);
        if (Context.Items["user"] != null) // e.g. this is after an initial logon
            string sKey = (string)Session["user"];
            // Accessing the Cache Item extends the Sliding Expiration automatically
            string sUser = (string)HttpContext.Current.Cache[sKey];
**This code is located in my web.config file
SESSIONSTATE timeout="1" cookieless="false" stateConnectionString="tcpip=" mode="StateServer"