在C#中创建会话

Nat*_*ogh 14 .net c# asp.net session

嗨,我正在使用3层从头开始创建一个登录表单.我已经设法构建一个工作表单来检查用户数据是否正确.如果他填写了错误的数据,他会得到一条消息.但现在我需要创建一个存储id的会话.

我在网上搜索过,他们说你必须添加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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*ora 24

.NET会话状态在表示层中处理,尽管它可以在Web工作进程中运行的任何业务逻辑中访问(请注意,还存在进程外会话状态,但也是从表示层管理的).与表示层之外的会话进行交互很少是一种好的做法.

在业务层中,可以使用以下方式访问会话:

System.Web.HttpContext.Current.Session
Run Code Online (Sandbox Code Playgroud)

在大多数Web实体(页面,控件,视图)中,它只是被引用Session.

Session是一个基于密钥的集合; 您使用键放入值,并使用键检索相同的值.

protected override void OnLoad( EventArgs e )
{
    Session["foo"] = "bar";
    string valueFromSession = Session["foo"].ToString();
}
Run Code Online (Sandbox Code Playgroud)