web-dev-qa-db-de.com

Sitzung in C # erstellen

Hallo Ich erstelle ein Anmeldeformular in c # von Grund auf mit 3 Ebenen. Es ist mir gelungen, ein Arbeitsformular zu erstellen, das überprüft, ob die Benutzerdaten korrekt sind. Wenn er die falschen Daten eingegeben hat, erhält er eine Nachricht. Jetzt muss ich jedoch eine Sitzung erstellen, um die ID zu speichern. 

Ich habe das Web durchsucht und sie sagen, Sie müssen Session["sessionName"]= data hinzufügen, aber wenn ich Session["userId"]=s.studentNummer eingebe, erkennt er nichts. Ist es besser, die Sitzungen in der DAL oder in der DLL abzulegen? Ich wollte es in die DAL schreiben (Funktion checkLogin). Kann mir bitte jemand helfen?

Hier ist mein Code:

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;
        }
    }
}
14

Der .NET-Sitzungsstatus wird in der Präsentationsschicht behandelt, obwohl auf ihn in jeder Geschäftslogik zugegriffen werden kann, die in einem Web-Worker-Prozess ausgeführt wird (beachten Sie, dass auch der Sitzungsstatus außerhalb des Prozesses liegt, der aber auch von der Präsentationsschicht aus verwaltet wird). Es ist selten empfehlenswert, mit Sitzungen außerhalb der Präsentationsebene zu interagieren.

Auf die Sitzung kann in der Geschäftsebene zugegriffen werden mit:

System.Web.HttpContext.Current.Session

In den meisten Web-Entities (Page, Control, View) wird es einfach mit Session referenziert.

Session ist eine schlüsselbasierte Sammlung. Sie geben einen Wert mit einem Schlüssel ein und rufen denselben Wert mit einem Schlüssel ab.

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

Sie können auch Cookies für die Sitzung verwenden:

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");
0
JEuvin

Der Zugriff auf die Sitzung ist nur in der Webanwendung verfügbar. Daher müssen Sie Werte für die Sitzung festlegen und abrufen und diese Werte aus dem Web an Ihre anderen Ebenen übergeben.

0
competent_tech