2011-12-15 2 views
13

Привет Я создаю форму входа с нуля в C#, используя 3 уровня. Мне удалось создать рабочую форму, которая проверяет правильность данных пользователя. Если он заполнит неверные данные, он получит сообщение. Но теперь мне нужно создать сеанс для хранения идентификатора.Создать сеанс в C#

Я искал в Интернете, и они говорят, что вы должны добавить Session["sessionName"]= data, но если я наберу Session["userId"]=s.studentNummer, он ничего не узнает. Лучше ли поставить сеансы в DAL или в DLL? Я хотел записать его в DAL (функция checkLogin). Может кто-нибудь, пожалуйста, помогите мне?

Вот мой код:

DALstudent.cs

public class DALstudent 
{ 
    dc_databankDataContext dc = new dc_databankDataContext(); 

    public void insertStudent(Student s) 
    { 
     dc.Students.InsertOnSubmit(s); 
     dc.SubmitChanges(); 
    } 

    public bool checkLogin(string ID, string passw) 
    { 
     bool canlogin = false; 
     var result = (from s in dc.Students 
         where s.studentNummer == ID && s.studentPasswoord == passw 
         select s).Count(); 
     if (result == 1) 
     { 
      canlogin = true; 
     } 
     else 
     { 
      canlogin = false; 
     } 
     return canlogin; 
    } 
} 

BLLstudent.cs

public class BLLstudent 
{ 
    DALstudent DALstudent = new DALstudent(); 

    public void insertStudent(Student s) 
    { 
     DALstudent.insertStudent(s); 
    } 

    public string getMD5Hash(string passwd) 
    { 
     MD5CryptoServiceProvider x = new MD5CryptoServiceProvider(); 
     byte[] bs = Encoding.UTF8.GetBytes(passwd); 
     bs = x.ComputeHash(bs); 
     StringBuilder str = new StringBuilder(); 
     foreach (byte b in bs) 
     { 
      str.Append(b.ToString("x2").ToLower()); 
     } 
     string password = str.ToString(); 
     return password; 
    } 

    public bool checkLogin(string ID, string passw) 
    { 
     bool canlogin = DALstudent.checkLogin(ID, passw); 
     if (canlogin == true) 
     { 
      return true; 
     } 
     else 
     { 
      throw new Exception("Uw gegevens kloppen niet"); 
     } 
    } 
} 

login.aspx.cs

public partial class web_login : System.Web.UI.Page 
{ 
    protected void btnLogin_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      BLLstudent BLLstudent = new BLLstudent(); 
      var loginNr = txtLoginNr.Text; 
      var pass = BLLstudent.getMD5Hash(txtWachtwoord.Text); 
      var passw = pass; 
      BLLstudent.checkLogin(loginNr, passw); 
      Response.Redirect("student/s_procedure_goedkeuring.aspx"); 
     } 
     catch (Exception Ex) 
     { 
      lblFeedback.Text = Ex.Message; 
     } 
    } 
} 
+0

Просьба представить подробную информацию о «он ничего не узнает.» Кроме того, состояние сеанса не входит в DAL или BLL. Он принадлежит прямо в веб-приложении. – David

+0

Ваш идентификатор пользователя совпадает с идентификатором, который пользователь использует для входа? если да, то вы можете напрямую обращаться к нему с помощью HttpContext.Current.User.Identity.Name.ToString() всякий раз, когда вам нужны данные идентификатора, без необходимости его сохранения в сеансе –

+3

MD5 не является безопасным хэшем. Используйте SHA1 или SHA2 и не забывайте солить. – Bengie

ответ

22

Состояние сеанса .NET обрабатывается в уровне представления, хотя оно доступно в любой бизнес-логике, выполняемой в процессе веб-рабочего процесса (обратите внимание, что также отсутствует состояние сеанса процесса, но это тоже управляется из уровня представления). Практически не рекомендуется взаимодействовать с сеансом за пределами уровня представления.

В бизнес-уровне, сеанс может быть доступен с:

System.Web.HttpContext.Current.Session 

Внутри большинства веб-сущностей (страницы, управления View) он просто ссылается Session.

Сессия - основанная на ключе; вы поместите значение с помощью ключа, и вы получите одно и то же значение с помощью ключа.

protected override void OnLoad(EventArgs e) 
{ 
    Session["foo"] = "bar"; 
    string valueFromSession = Session["foo"].ToString(); 
} 
+0

Спасибо !!! У меня есть (работает). Я, хотя я должен был поместить его в DAL, где запрос, как я сделал в php. –

0

Доступ к сессии только будут доступны в веб-приложение, поэтому вам нужно будет установить и получить значения из сеанса и передать эти значения другим уровням из Интернета.

0

Вы также можете использовать куки для сессии:

if (SessionHash != null && (!HttpContext.Current.Request.Cookies.AllKeys.Contains("hash")) { 
    var cookie = new HttpCookie("hash", Convert.ToBase64String(SessionHash)) { 
    HttpOnly = true 
    }; 

    HttpContext.Current.Response.Cookies.Set(cookie); 
} 

// remove cookie on log out. 
HttpContext.Current.Request.Cookies.Remove("hash"); 
Смежные вопросы