2011-12-15 13 views
13

Ciao Sto creando un modulo di accesso da zero in C# utilizzando 3 livelli. Sono riuscito a creare un modulo di lavoro che controlla se i dati dell'utente sono corretti. Se ha inserito dati errati, riceverà un messaggio. Ma ora ho bisogno di creare una sessione per memorizzare l'id.Crea sessione in C#

Ho cercato sul Web e dicono che è necessario aggiungere Session["sessionName"]= data, ma se digito Session["userId"]=s.studentNummer non riconosce nulla. È meglio mettere le sessioni nel DAL o nella DLL? Volevo scriverlo nel DAL (function checkLogin). Qualcuno può aiutarmi?

Ecco il mio codice:

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

Si prega di elaborare su Inoltre, lo stato della sessione non va nel DAL o nel BLL. Appartiene direttamente nell'applicazione web. – David

+0

è il tuo id utente identico a quello che l'utente usa per accedere? in caso affermativo, è possibile accedervi direttamente tramite HttpContext.Current.User.Identity.Name.ToString() ogni volta che si desiderano dati ID, senza necessità di memorizzarli nella sessione –

+3

MD5 non è un hash sicuro. Utilizzare SHA1 o SHA2 e non dimenticare di salare. – Bengie

risposta

22

Lo stato della sessione .NET viene gestito nel livello presentazione, sebbene sia accessibile in qualsiasi logica aziendale in esecuzione in un processo di lavoro Web (si noti che è anche fuori sessione lo stato della sessione, ma anche quello viene gestito dal livello presentazione). Raramente è buona norma interagire con la sessione al di fuori del livello di presentazione.

nel livello aziendale, la sessione si può accedere con:

System.Web.HttpContext.Current.Session 

All'interno maggior parte delle entità web (pagina, controllo, View) è semplicemente referenziato da Session.

Sessione è una raccolta basata su chiavi; inserisci un valore con una chiave e recuperi lo stesso valore con una chiave.

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

Grazie !!! Ce l'ho (funziona). Ho anche se ho dovuto metterlo nel DAL, dove la query è, come ho fatto in php. –

0

accesso alla sessione è unica sarà disponibile nel applicazione web, quindi sarà necessario impostare e ottenere valori dalla sessione e passare questi valori agli altri livelli dal Web.

0

È inoltre possibile utilizzare i cookie per la sessione: "non riconosce nulla"

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"); 
Problemi correlati