web-dev-qa-db-fra.com

Créer une session en C #

Salut, je crée un formulaire de connexion à partir de zéro en c # en utilisant 3 niveaux. J'ai réussi à créer un formulaire de travail qui vérifie si les données de l'utilisateur sont correctes. S'il a entré les mauvaises données, il recevra un message. Mais maintenant, je dois créer une session pour stocker l'identifiant. 

J'ai fait une recherche sur le Web et ils disent que vous devez ajouter Session["sessionName"]= data, mais si je tape Session["userId"]=s.studentNummer, il ne reconnaît rien. Est-il préférable de mettre les sessions dans le DAL ou dans la DLL? Je voulais l'écrire dans le DAL (fonction checkLogin). Quelqu'un peut-il m'aider s'il vous plaît?

Voici mon 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
Nathalie De Hertogh

L'état de session .NET est géré dans le niveau de présentation, bien qu'il soit accessible dans toute logique métier s'exécutant dans un processus de traitement Web (notez qu'il existe également un état de session en dehors du processus, mais qu'il est également géré à partir du niveau de présentation). Il est rarement recommandé d’interagir avec une session en dehors du niveau présentation.

Dans la couche métier, la session est accessible avec:

System.Web.HttpContext.Current.Session

Dans la plupart des entités Web (page, contrôle, vue), il est simplement référencé par Session.

Session est une collection basée sur des clés. vous mettez une valeur avec une clé et vous récupérez la même valeur avec une clé.

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

Vous pouvez également utiliser des cookies pour la session:

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

L'accès à la session ne sera disponible que dans l'application Web. Vous devrez donc définir et obtenir des valeurs de la session et les transmettre à vos autres couches à partir du Web.

0
competent_tech