2012-11-06 1 views
0

В моем веб-приложение ASP.NET я хочу, чтобы предотвратить множественный вход пользователя с таким же именем пользователя на другой машине, или же ПК с помощью Cache.So, в моей странице Global.asax.as,Как предотвратить множественный вход пользователя с одного и того же идентификатора пользователя в asp.net с использованием кеша?

я поставил этот линия ...

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 событии. ..

Я не знаю, что это вопрос здесь ... Так что, пожалуйста, руководство меня, чтобы выйти из этого вопроса ...

Или скажите мне еще один хороший подход вместо этого ...

ответ

1

Состояние сеанса недоступно во время первоначального запроса и может быть пустым в последующих запросах. Проверьте значение null на объекте состояния сеанса, а не только на ключ/значение.

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

Сторона примечания, ваше использование ответа. Запишите здесь ... хотя и недействительно, является нетипичным. Я бы предложил перенаправление в районы.

+0

: Спасибо за ценный suggestion.Could вы пожалуйста, сообщите мне о «как проверить нуль на сессии состояния объекта»? – Saravanan

+1

Я предоставил вам пример в своем посте. – Hardrada

+0

Большое спасибо ... только сейчас я вошел в систему и по-разному закрыл браузер с выходом из системы. Итак, в следующий раз, когда я попытался ... но это помешало мне войти в систему ... Как долго кеш сеанса для пользователя сохраняется ... – Saravanan

0

Использование HTTPContext.Current.Session

+0

: Спасибо .. Просто сейчас я вошел в систему и по-разному закрыл браузер с выходом из системы. Так, в следующий раз, когда я попытался ... но это помешало мне войти в систему ... Как долго сессия сохраняется ... i означало, каково значение переменной SessTimeOut ... – Saravanan

+1

Время ожидания сеанса по умолчанию - 20 минут, если я помню. – Hardrada

+0

Да, это 20 минут, вы можете проверить это в своем web.config. Если у вас его нет, вы уже здесь: http://msdn.microsoft.com/en-us/library/h6bb9cz9(vs.80).aspx – SutharMonil

0

использовать этот обработчик события

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