ASP.NET 管理员登录

转载 2012年03月27日 11:46:49

本节我们将完成管理员的登录和注销,这里要学习一个重要的知识点“会话(Session)”。因为HTTP协议是无状态非持续连接的协议,它没有办法识别客户端,也无法记住客户端的状态,所以需要使用额外的手段——会话Session,来记录客户端的状态。客户端每次访问服务器,服务器都会给它分配一个唯一的Session ID,来标示这个连接。如果客户端没有关闭连接,继续访问服务器的话,那它的的ID就没有变,服务器就知道,上一次连接和这一次连接时来自同一个客户端。如果客户端关闭连接,它的Session ID就清空,这时新开一个连接来访问服务器,服务器就会又分配一个新的Session ID来标示这个客户端。这就像我们访问QQ空间一样,需要先登录,登录后只要不关闭IE浏览器,Session ID没有变化,我们就可以任意的访问日志、相册等功能。如果我们关闭IE或者选择退出后,就会清空Session ID,这时我们再访问QQ空间,因为Session ID已经被清空,所以服务器不能识别我们刚才已经登录过了,所以分配给给我们一个新的Session ID,并要求我们重新登录。
Session 允许通过将对象存储在 Web 服务器的内存中,这样在整个用户会话过程中就可以通过保存的客户端信息来识别客户端,也可以暂存一些小的数据。在Session保存数据是用“键值对(Key-Value)”来实现的,键相当于ID,是一个唯一的标识符,值是我们需要存储的数据。ASP.NET中Session操作的语法如下:
Session.Add ( "AdminName", "张三" ); // 把 张三 这个字符串暂存在Session中,并给它一个标识符 AdminName
Session.Add ( "AdminID", "12" ); // 把 12 这个字符串暂存在Session中,并给它一个标识符 AdminID
string s1 = Session["AdminName"].ToString(); /* 从Session把标识符为AdminName的值取出来,转换成字符串,赋值给s1,s1 = "张三"  */
string s2 = Session["AdminID"].ToString(); // s2 = "12"
 
在具备Session的知识之后,我们就可以开始完成用户登录和注销功能。
1、在网站根目录下(注意:管理员登录属于前台页面),新建一个页面Admin_Login.aspx,选择母版页MasterPage.Master 。打开设计视图,设计一个如下页面。其中,在用户名的上方,从工具箱中拖入1个Label控件,用来显示登录失败后的信息,用户名和密码后面拖入2个文本输入框TextBox控件,MaxLength=“20” 属性限定输入不超过20个字符,TextMode=“Password" 属性标示这是一个密码输入框。在用户名和密码输入框的后面,从【工具箱】-【验证】栏目中拖入2个“RequiredFieldValidator 必填选项验证控件 ”,然后选中第一个RequiredFieldValidator控件,打开属性面板,设置 ControlToValidate属性为TextBox1,表示这个验证控是验证TextBox1有没有输入内容;设置 ErrorMessage属性为“必填选项”,表示当TextBox1没有输入内容就提交时,提示“必填选项”这四个字。同理,选中第二个RequiredFieldValidator控件,设置 ControlToValidate属性为TextBox2,表示这个验证控是验证TextBox2有没有输入内容;设置 ErrorMessage属性为“必填选项”。最后再拖入一个Button按钮,Text属性为“登录”。
 
ASP.NET 管理员登录和注销 - Justin - 贾斯汀工作室 Design  Dev
选择源视图,查看我们用到了哪些控件,以及每个控件设定了哪些属性:

     <h3>用户登录:</h3><br />
    <p>
        <asp:Label ID="Label1" runat="server" Text=""  ForeColor="Red" Font-Size="Larger"></asp:Label>
    </p>
        <p>
        用户名:<asp:TextBox ID="TextBox1" runat="server" MaxLength="20"></asp:TextBox>&nbsp;
    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
            ControlToValidate="TextBox1" ErrorMessage="必填选项"></asp:RequiredFieldValidator>
    </p>
    <p>
        密&nbsp; 码:<asp:TextBox ID="TextBox2" runat="server" TextMode="Password"></asp:TextBox>&nbsp;
        <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" 
            ControlToValidate="TextBox2" ErrorMessage="必填选项"></asp:RequiredFieldValidator>

    </p>
     <p>
        <asp:Button ID="Button1" runat="server" Text=" 登  录 " Height="24px" 
            onclick="Button1_Click" />
    </p>

 2、选择Admin_Login.aspx的设计视图,在登录按钮上双击,打开Admin_Login.aspx.cs页面,完成Button1_Click()方法: 
         protected void Button1_Click(object sender, EventArgs e)
    {
        // 先让Label1的文本为空字符串,隐藏错误信息
        Label1.Text = "";
        string s = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + Server.MapPath("~/App_Data/MyDataBase.mdb");
        using (OleDbConnection conn = new OleDbConnection(s))
        {
            // 定义SQL语句,@Admin 表示这是一个占位符,@Password表示这是另外一个占位符
            string sql = "select * from Admin where AdminName = @AdminName and [password] = @Password";
            OleDbCommand cmd = new OleDbCommand(sql, conn);
            // 把TextBox1的输入框的内容赋值给@Admin占位符
            cmd.Parameters.AddWithValue("@AdminName", TextBox1.Text);
            // 把TextBox2的输入框的内容赋值给@Password占位符
            cmd.Parameters.AddWithValue("@Password", TextBox2.Text);
            conn.Open();
            // 赋值完成之后,sql就是一条完整的查询语句
            OleDbDataReader rd = cmd.ExecuteReader();
            if (rd.Read())
            {
                // 如果有记录,说明用户名和密码正确
                // 把用户名放入Session中暂存起来,同时给它一个标识符 AdminName
                Session.Add("AdminName", TextBox1.Text);
                // 把用户ID放入Session中暂存起来,同时给它一个标识符 AdminID
                Session.Add("AdminID", rd["ID"].ToString());
                // 把用户权限放入Session中暂存起来,同时给它一个标识符 Purview
                Session.Add("Purview", rd["Purview"].ToString());
                // 登录成功,跳转到后台的管理员管理页面
                Response.Redirect("admin/Admin_Man.aspx");                
            }
            else
            {
                // 用户名和密码不匹配,提示出错信息
                Label1.Text = "用户名或密码错误,请重新输入!";
            }
        }
    }
 
3、继续Admin_Login.aspx.cs页面,在Page_Load()方法中,添加以下代码,清空Session中的数据:
     protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            // 清空Session中暂存的数据
            Session.Clear();
        }
    }
 
4、选择全部保存。然后打开后台母版页(admin文件夹里的MasterPage2.master),在设计视图下,输入“当前用户:”和“权限”,然后选择源视图,在当前用户和权限后,输入如下代码:
 <h2>当前用户:<%= Session["AdminName"] %>;权限:<%= Session["Purview"] %>
&nbsp;<a href="../Admin_Login.aspx">登录</a> | <a href="Admin_Add.aspx">新增管理员</a> | <a href="Admin_Man.aspx">管理员管理</a> | <a href="Class_Man.aspx">栏目管理</a> </h2>
注意粗体标示的部分:Session["AdminName"] 表示从Session取出Key为AdminName的数据,Session["Purview"] 表示从Session取出Key为Purview的数据,<%= Session["AdminName"] %>表示把从Session取出来的数据在页面上显示,例如<%= "张三" %>就会在页面上显示 张三 这个字符串。此外,还加多一个到登录页面的超级链接,注意路径的写法 ../Admin_Login.aspx ,../表示上一级目录,../Admin_Login.aspx 表示上一级目录中的Admin_Login.aspx页面。
把Admin_Login.aspx设为起始页,我们就可以看到实际效果了:只有用户名和密码正确才能登录成功,试试不同用户,登录成功后会显示当前用户的用户名和权限。
这里需要重点提示,在新增管理员页面Admin_Add.aspx中,SQL语句的写法,"'" + TextBox1.Text + "','" +TextBox2.Text + "' "  ...  这里TextBox1.Text前后的双引号中,是1个单引号,而不是空格单引号,像"' " + TextBox1.Text + " ',' "   错了。就像 "张三"  和 "  张三 " 是两个不同的字符串,第二个张三前后各有1个空格,第一个没有。所以,用户名密码正确,但登录不成功,检查一下Access数据库中Admin表中的AdminName和Password字段的值,前后是不是有多余的空格?
但这里还有一个小小的问题,就是如果我们运行Admin_Login.aspx页面后,并不登录,而是在地址栏中直接输入管理员管理页面的URL,也就是在地址栏中,把Admin_Login.aspx用admin/Admin_Man.aspx替换掉,然后回车,就可以避开登录,直接访问后台页面了。这是一个很危险的事情,我们需要完成用户登录的最后一个步骤。
 
5、打开后台母版页的cs文件,也就是MasterPage2.master.cs,在Page_Load()方法中,添加以下代码:
     protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if (Session["AdminID"] == null)
            {
                // Session["AdminID"]为空,则说明没有登录;因为登录成功后,我们会把管理员的ID暂存在Session中
                // 弹出一个警告框 
                Response.Write("<script>alert('请登录后访问本页面!');</script>");
                // 跳转到登录页面
                Response.Write("<script>location.href='../Admin_Login.aspx';</script>");
            }
        }
    }
 
6、选择全部保存,就可以看到完整的登录效果,在地址栏中试图输入URL来访问后台页面,好像不大可能了。哇,太酷了!在下一节课中,我们将完善用户登录程序,为它加上验证码,这离网站的成功又近了一步,同学们,好好加油!
此文重点突出,浅显易懂,帮转载,原文地址:
http://justinsoho.blog.163.com/blog/static/14078207220103881651169/

ASP.NET中获取登录用户ID 用户身份验证

如果VS2005及VS2008中使用菜单【网站】|【ASP.NET配置】进入使用网站管理工具(WAT)的表单验证(Forms验证)方式来建立网站数据库,默认数据库名为ASPNETDB.MDF。系统将会...
  • ziren
  • ziren
  • 2014年09月08日 12:11
  • 6397

普通用户登录和管理员登录区分

查阅的资料,先缝合成自己的,写登录注册页面是要注意的细节。 http://bbs.csdn.net/topics/390888578...

在 ASP.NET 中实现不同角色的用户使用不同登录界面的方法

很多用户在开发 ASP.NET 应用程序时都有这样的需求:管理员角色的账户使用管理员的登录界面进行登录,普通用户角色的账户使用普通用户的登录界面进行登录。由于ASP.NET的web.config里只能...

ASP.NET中获取登录用户ID 用户身份验证

如果VS2005及VS2008中使用菜单【网站】|【ASP.NET配置】进入使用网站管理工具(WAT)的表单验证(Forms验证)方式来建立网站数据库,默认数据库名为ASPNETDB.MDF。系统将会...
  • ziren
  • ziren
  • 2014年09月08日 12:11
  • 6397

ASP.NET 实现站内信功能(点对点发送,管理员群发)

正好这段时间在研究这个功能,还是得感谢这位大神,没有他的引路,我就不可能把站内信做出来。 http://www.cnblogs.com/grenet/archive/2010/03/08/16806...

ASP.NET网络高级管理员

  • 2011年07月18日 15:58
  • 23KB
  • 下载

用ASP.NET实现简单的超市管理系统-登录页面

一、  任务描述 1.     使用Asp.NET技术,完成超市商品管理系统 2.     开发工具:VS2010 3.     数据库:SQL Server 2008 4.     功能模块...

ASP.NET单点登录 TOKEN的使用

原網址鏈接 asp.net 跨域单点登录实现原理: 当用户第一次访问web应用系统的时候,因为还没有登录,会被引导到认证中心进行登录; 根据用户提供的登录信息,认证系统进行身份效验,...
  • LeeJay5
  • LeeJay5
  • 2014年10月03日 15:31
  • 3754

Asp.Net中用户NT AUTHORITY\NETWORK SERVICE 登录失败(SQL2005/2008设置的解决方法)

用户 NT AUTHORITY\NETWORK SERVICE 登录失败 解决方法 (MS SQL 2005) Windows server 2003,2008 Web.Config 配...
  • dxnn520
  • dxnn520
  • 2012年12月03日 21:57
  • 2871
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASP.NET 管理员登录
举报原因:
原因补充:

(最多只允许输入30个字)