2016-02-08 2 views
0

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

protected void Page_Load(object sender, EventArgs e) 
      { 
       if (Session["LiveUser"] != null) 
       { 

       } 
       else 
       { 
        Response.Redirect("InvalidForm.aspx"); 
       } 
      } 


protected void ButtonLogOut_Click(object sender, EventArgs e) 
     { 
      Response.Redirect("LoginForm.aspx"); 
      Session["LiveUser"] = null; 

     } 

Кнопка выхода из системы:

<asp:Button ID="ButtonLogOut" runat="server" CssClass="btnLogout" 
        Text="Log Out" OnClick="ButtonLogOut_Click" /> 

Войти код кнопки позади:

protected void btnSubmit_Click(object sender, EventArgs e) 
     { 
      string query = "select UserActive from nWorksUser where Username='" + this.txtUsername.Text + "' and _password='" + Encrypt(this.txtPassword.Text) + "';"; 
      MySqlCommand cmd = new MySqlCommand(query, conn); 
      MySqlDataReader rdr; 
      conn.Open(); 
      rdr = cmd.ExecuteReader(); 
      string ActiveUser = ""; 
      while (rdr.Read()) 
      { 
       ActiveUser = rdr.GetString("UserActive"); 
      } 
      conn.Close(); 
      if (ActiveUser == "true") 
      { 
       if (trylogin(txtUsername.Text, txtPassword.Text) == true) 
       { 
        Session.Add("LiveUser",GetUsername()); 
        Response.Redirect("AttendanceForm.aspx"); 
       } 
       else 
       { 
        lableMessage.Text = "Wrong Credentials. Please try again"; 
       } 
      } 
      else 
      { 
       conn.Open(); 
       query = "select UserActive from nWorksUser where Username='" + this.txtUsername.Text + "';"; 
       MySqlCommand cmd1 = new MySqlCommand(query, conn); 
       MySqlDataReader rdr1; 
       rdr1 = cmd1.ExecuteReader(); 
       ActiveUser = ""; 
       while (rdr1.Read()) 
       { 
        ActiveUser = rdr1.GetString("UserActive"); 
       } 
       conn.Close(); 
       if (ActiveUser == "true") 
       { 
        lableMessage.Text = "Wrong Credentials. Please try again"; 
       } 
       else if (ActiveUser == "") 
       { 
        lableMessage.Text = "User is anavailable..!!"; 
       } 
       else 
       { 
        lableMessage.Text = "User is expired..!!"; 
       } 
      } 

Если нажать кнопку назад браузера после выхода из Прогнозный ведут себя, это спросить для имени пользователя/пароля не нажать еще раз в приложении. Каким должно быть решение?

+0

У вас есть ОГРОМНАЯ проблема безопасности с SQL Инъекции имя пользователя Пароль! Никогда не комбинируйте SQL-строку как это, используйте sql-параметры! –

ответ

2

Выход нажмите событие должно выглядеть следующим образом:

protected void ButtonLogOut_Click(object sender, EventArgs e) 
{ 
    Session.Clear(); 
    Session.Abandon(); 
    Response.Redirect("LoginForm.aspx"); 
} 

Перенаправление должен быть последним.
Кроме того, имейте в виду, что события asp.net post back (нажатие кнопки) не поддерживают кнопку обратной связи браузера, так как они будут пытаться снова добавить данные формы.
Для выхода из системы используйте регулярные A HREF ссылки на открытой странице SignOut с помощью метода GET, или использовать пост-редирект-получить технику в случае пост-обратно (Post-Redirect-Get with ASP.NET)

+0

Несомненно, сэр. Благодарю. – Dipak