it-swarm-pt.tech

Criar sessão em c #

Oi eu estou criando um formulário de login a partir do zero em c # usando 3 camadas. Consegui criar um formulário de trabalho que verifica se os dados do usuário estão corretos. Se ele preencher os dados errados, ele receberá uma mensagem. Mas agora preciso criar uma sessão para armazenar o id. 

Eu pesquisei na web e eles dizem que você tem que adicionar Session["sessionName"]= data, mas se eu digitar Session["userId"]=s.studentNummer ele não reconhece nada. É melhor colocar as sessões no DAL ou na DLL? Eu queria escrevê-lo no DAL (função checkLogin). Alguém pode me ajudar por favor?

Aqui está meu código:

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

O estado da sessão .NET é tratado na camada de apresentação, embora seja acessível em qualquer lógica de negócios executada em um processo de operador da Web (observe que também há estado de sessão fora do processo, mas também é gerenciado a partir da camada de apresentação). Raramente é uma boa prática interagir com a sessão fora do nível de apresentação.

Na camada de negócios, a sessão pode ser acessada com:

System.Web.HttpContext.Current.Session

Dentro da maioria das entidades da web (Página, Controle, Visualização), ela é simplesmente referenciada por Session.

Sessão é uma coleção baseada em chave; você coloca um valor com uma chave e recupera o mesmo valor com uma chave.

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

Você também pode usar cookies para a sessão:

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

O acesso à sessão só estará disponível no aplicativo da web, portanto, você precisará definir e obter valores da sessão e passar esses valores para as outras camadas da web.

0
competent_tech