用c#创建会话
本文关键字:会话 创建 | 更新日期: 2023-09-27 18:17:54
嗨,我正在用c#从头开始创建一个登录表单,使用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;
}
}
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;
}
}
}
。. NET会话状态在表示层处理,尽管它可以在web工作进程中运行的任何业务逻辑中访问(注意,也有进程外会话状态,但也由表示层管理)。在表示层之外与会话交互很少是好的做法。
在业务层,可以使用以下命令访问会话:
System.Web.HttpContext.Current.Session
在大多数web实体(Page, Control, View)中,它只是被Session
引用。
Session是一个基于键的集合;用键输入值,然后用键检索相同的值。
protected override void OnLoad( EventArgs e )
{
Session["foo"] = "bar";
string valueFromSession = Session["foo"].ToString();
}
对会话的访问只在web应用程序中可用,因此您需要设置并从会话中获取值,并将这些值从web传递给其他层
您也可以在会话中使用cookie:
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");