2015-07-17 4 views
0

Мне интересно, как выйти из сеанса на C# с помощью ASP.NET. Я использую SQL Server для retrive имена пользователей для того, когда они вошли в систему, (2-й блок кода ниже) Непосредственно ниже вот мой код позади моей кнопки входа в систему с моей страницы ASPXКак выйти из системы (с сеансом)

protected void btnLogin_Click(object sender, EventArgs e) 
{ 
     string email = txtEmail.Text; 
     string password = txtPassword.Text;//AQUIRE EMAIL AND PASSWORD AND ADD TO STRINGS 

     SqlDataReader dataread = null; 

     SQLconn.Open(); 
     SqlCommand chkLogin = new SqlCommand("SELECT * FROM Member WHERE Email='" + email + "' AND Password='" + password + "'", SQLconn); 
     dataread = chkLogin.ExecuteReader(); 
     SqlCommand nameAdd = new SqlCommand("SELECT Name FROM Member WHERE Email='" + email + "'", SQLconn); 

     if (dataread.Read()) 
     { 
      Response.Write("You are logged in"); 

      Session.Add("userID", dataread[0].ToString()); 
      Session.Add("userFName", dataread[1].ToString()); 
      Session.Add("userEmail", dataread[3].ToString()); 

      Response.Redirect("~/Profiles.aspx"); 
     } 
     else 
     { 
      Response.Write("Please try again. Usernames and Passwords do not match."); 
     } 
     SQLconn.Close(); 
    } 

Когда они вошедшие в систему, они перенаправляются на другую страницу. Вот код позади для этой страницы

if (Session.Count > 0) 
{ 
    if (Session.Count > 0) 
    { 
       string name = (string)Session["userFName"]; 
       txtGreeting.Visible = true; 
       txtGreeting.Text = "Welcome " + name + " , you are logged in! "; 
    } 
} 
+1

либо использовать try/catch или 'using' при работе с SqlConn, SqlDataReader и т. Д. – ganders

+2

Нельзя откатывать свою собственную систему аутентификации пользователей, если вы не знаете, что делаете. И вы явно не знаете, что делаете. Вы храните пароли в виде открытого текста в базе данных. Пожалуйста, серьезно относитесь к безопасности для вашего пользователя. Пароли должны храниться только в хешированной форме в базе данных, и ваша система проверки должна сравнивать хешированные значения. – mason

+0

Это локальный проект, который я создаю, не будет пользователей для взлома – user1371055

ответ

-1

То, как вы используете сеанс для входа в/из не является правильным, но с тем, что если вы просто пытаетесь удалить пользователя, когда выйти из щелкают сделать это:

Session["userFName"] = null; //the other session vars related to user as well 

Предложение: Изучите аутентификацию форм при минимальной или, возможно, аутентификации по токенам. Сессия может быть захвачена, и вы открываете приложение для атаки.

+2

session.clear, session.removeall , ... исследование более – nelek

+0

@nelek вам может потребоваться больше исследований. Использование .Clear() или .RemoveAll() очистит все сеансовые вары не только от информации пользователя. –

+0

да, это будет, и это тот момент, когда пользователь выходит из системы ... и особенно session.abandon ... читайте ваше предложение, вторая фраза;) Я не имею в виду ничего плохого в этом исследовании. Нет жесткого чувства. – nelek

0

Вы можете использовать Session.Clear(); когда пользователь нажимает кнопку «Выход», если она у вас есть.

И на вашем этого метода

if (Session.Count > 0) 
{ 
if (Session["username"] != null) 
{ 
      string name = (string)Session["userFName"]; 
      txtGreeting.Visible = true; 
      txtGreeting.Text = "Welcome " + name + " , you are logged in! "; 
} 
else{ 
Response.Redirect(Logout.aspx); 
} 
} 

добавить еще одно условие, чтобы проверить, имеет ли Session-то или нет.