第一次做多层架构的项目,什么也不太清楚,做登录页时,需要用session来保存用户信息,通过判断session中的有用信息,来决定让用户进入哪个页面和显示用户所拥有的权限。
1.Login.aspx代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Login" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
用户名:<asp:TextBox runat="server" ID="txtUserName"></asp:TextBox>
<asp:RequiredFieldValidator runat="server" ID="rfvUserName" ControlToValidate="txtUserName" ErrorMessage="用户账号不能为空,请输入您的用户账号!">
</asp:RequiredFieldValidator>
<br/>
密码:<asp:TextBox runat="server" ID="txtPassword" TextMode="Password"></asp:TextBox>
<asp:RequiredFieldValidator runat="server" ID="rfvPassword" ControlToValidate="txtPassword" ErrorMessage="用户密码不能为空,请输入您的密码!"
Display="Dynamic"></asp:RequiredFieldValidator>
<br/>
<asp:CheckBox ID="CheckBox1" runat="server" Text="保存密码"
oncheckedchanged="CheckBox1_CheckedChanged" />
<br/>
<asp:Button runat="server" ID="btnLogin" Text="登录" οnclick="btnLogin_Click"/>
<br />
</div>
</form>
</body>
</html>
2.Login.aspx.cs代码:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.SessionState;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using ESchool.BLL;
using ESchool.Entity;
using System.Collections.Generic;
using System.Data;
public partial class Login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnLogin_Click(object sender, EventArgs e)
{
//实例化业务逻辑层用户对象
ESchool.BLL.BllUserInfo bllUserInfo = new BllUserInfo();
//判断用户名,密码是否正确
if (bllUserInfo.Login(this.txtUserName.Text, this.txtPassword.Text))
{
//以对象的形式将用户信息保存入session
System.Web.HttpContext.Current.Session["UserInfo"] = bllUserInfo.SelectUserInfoByUserName(this.txtUserName.Text);
//获取session中保存的用户信息,将Session["UserInfo"]转换成ESchool.Entity.UserInfo类。
ESchool.Entity.UserInfo userInfo = Session["UserInfo"] as ESchool.Entity.UserInfo;
//通过用户名将获取到的角色Id保存入session
System.Web.HttpContext.Current.Session["UserRolesId"] = bllUserInfo.GetRolesIdByUserName(userInfo.UserName);
//获取session中保存的用户角色信息,将Session["UserRolesId"]转换成List<int>类。
List<int> roleId = Session["UserRolesId"] as List<int>;
//判断用户身份(1代表学生,2代表老师),如果是学生,刚转入学生页,如果是老师,则转入教师页
if (userInfo.Useridentity==1)
{
//跳转,在另一页面中显示session中所有内容。
Response.Redirect("ReceiveMessage.aspx");
}
else
{
Response.Redirect("Default.aspx");
}
//Response.Write("<script>alert('登录成功')</script>");
/*
//将正确的用户名和密码保存在session中
// System.Web.HttpContext.Current.Session["userName"] = this.txtUserName.Text;
//Session["userName"] = this.txtUserName.Text;
//Session["password"] = this.txtPassword.Text;
//session的Add方法也可以保存。
//Session.Add("userName", this.txtUserName.Text);
//Session.Add("password", this.txtPassword.Text);
*/
}
else
{
Response.Write("<script>alert('用户名或密码错误,请重新输入。')</script>");
//Response.Redirect("Login.aspx");
}
}
}
3.ReceiveMessage.aspx.cs代码:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using ESchool.Entity;
using System.Collections.Generic;
public partial class ReceiveMessage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
获取session中保存的用户信息,将Session["UserInfo"]转换成ESchool.Entity.UserInfo类。
ESchool.Entity.UserInfo userInfo = Session["UserInfo"] as ESchool.Entity.UserInfo;
//获取session中保存的用户角色信息,将Session["UserRolesId"]转换成List<int>类
List<int> roleId = Session["UserRolesId"] as List<int>;
//输出session中保存的内容。
Response.Write(userInfo.UserId + "<br/>" + userInfo.UserName + "<br/>" + userInfo.Password + "<br/>" + userInfo.Useridentity + "<br/>");
//从session中取出角色Id
if (Session["UserRolesId"] != null)
{
//遍历所有项然后输出。
foreach (int role in roleId)
{
Response.Write(role);
Response.Write("<br />");
}
}
/* 死循环,内存完全被占用。
//从session中取出角色Id
if (Session["UserRolesId"] != null)
{
List<int> roleId = Session["UserRolesId"] as List<int>;
if (roleId != null)
{
while (true)
{
Response.Write(roleId);
Response.Write("<br />");
}
}
}
*/
}
}
Default.aspx.cs页代码与上一个一样,为了测试身份而选择转入不同页。这转入页中会显示出用户的Id,用户名,用户密码,用户身份,以及用户所拥有的角色Id。
由于是多层架构,许多方法直接是调用底层代码所实现的,就不一一贴出了。
刚接触Session,什么也不会,都是在网上自己查的,测试读出session时,一不小心写了个死循环代码,结果导致自己电脑内存嗖的一下完全被占用,电脑直接卡死,以后要小心了。