如何防止多个用户使用缓存从asp.net中的同一用户ID登录?

时间:2012-11-06 06:21:58

标签: c# asp.net session-state

在我的asp.net Web应用程序中,我希望通过使用Cache.So阻止多个用户在不同计算机或同一台PC上使用相同的用户名登录,在我的Global.asax.as页面中,

我把这一行......

protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e)
   {
     if (Session["user"] != null) // e.g. this is after an initial logon
     {
        string sKey = (string)Session["user"];
        string sUser = (string)HttpContext.Current.Cache[sKey];
     }
   }

并在我的页面登录提交按钮单击,

string userName=uName.Text;
string passWord=pwd.Text;

string sKey = uName.Text;
string sUser = Convert.ToString(Cache[sKey]);
if (sUser == null || sUser == String.Empty)
           {
               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"] = TextBox1.Text.Trim();

               if (userName.Equals(db_userName) && passWord.Equals(db_password))
               {
                   Response.Write("Welcome " + userName);
               }
               else
               {
                   Response.Write("Invalid Login");
               }
           }
           else
           {
               Response.Write("<Marquee><h1><font color=red>ILLEGAL LOGIN ATTEMPT!!!</font></h1></marquee>");
               return;
           }

但是当运行我的应用程序时,它正在提升会话状态在Application_PreRequestHandlerExecute事件中的此上下文错误消息中不可用...

我不知道这里有什么问题......所以,请指导我摆脱这个问题......

或者告诉我另一个好的方法而不是这个......

3 个答案:

答案 0 :(得分:1)

会话状态在初始请求期间不可用,并且在后续请求中可能为null。检查会话状态对象上的null,而不仅仅是键/值。

if(HttpContext.Current.Session!=null){
//Proceed with xyz
}

旁注,你在这里使用Response.Write虽然没有效,但却是非典型的。我建议重定向到区域。

答案 1 :(得分:0)

使用HTTPContext.Current.Session

答案 2 :(得分:0)

使用此事件处理程序

 void Application_AcquireRequestState(object sender, EventArgs e)
   {
       if(HttpContext.Current.Session!=null)
          {
              // Place your Code here 
          }
   }