Session对象

Application对象的作用域是全局的,而Session对象用于将特定用户的信息存储在服务器的内存中,并且只针对单一网站使用者,不同的客户端无法互相访问。Session对象在网站超时或者自主关掉浏览器时就会自动释放和关闭。

Session对象的基本使用

Application对象相同,它也是通过键/值对的方式来保存数据的,格式:

Session["varName"] = 值;

其中varName为变量名,例如将TextBox控件的文本存储到Session["varName"]中:

Session["varName"] = TextBox.Text;

反之,将Session["varName"]的值存储到TextBox中:

TextBox.Text = Session["varName"].ToString();
使用Session对象保存用户的登录信息

某个用户登录一个网站,会保存其登录信息,这些信息是其他用户不可见的,并且不可访问,所以用Session对象存储。

1、新建一个网站,在项目中创建一个Login.aspx登录页面,添加以下控件:

session中放值 session中存放对象_用户名


或者也可以利用以下代码,添加这四个控件:

<table>
    <tr><td>用户名:</td><td><asp:TextBox ID="txtUserName" runat="server"></asp:TextBox>(wzq)</td></tr>
    <tr><td>密码:</td><td><asp:TextBox ID="txtPwd" runat ="server" TextMode="Password"></asp:TextBox>(wzq)</td></tr>
    <tr><td colspan="2">
        <asp:Button ID="btnLogin" runat="server" Text="登录" OnClick="btnLogin_Click" />
        <asp:Button ID="btnCancel" runat="server" Text="取消" />
        </td></tr>
</table>

2、用户双击“登录”按钮,触发btnLogin_Click事件,在该事件中记录用户名及用户登录的时间,并跳转到Welcome.aspx页面(新建一个名为WelcomeWeb窗体),代码如下:

protected void btnLogin_Click(object sender, EventArgs e)
        {
            if (txtUserName.Text == "wzq" && txtPwd.Text == "wzq")
            {
                Session["UserName"] = txtUserName.Text;
                Session["LoginTime"] = DateTime.Now;
                Response.Redirect("~/Welcome.aspx");
            }
            else
            {
                Response.Write("<script>alert('登录失败!请返回查找原因');location='Login.aspx'</script>");
            }
        }

3、在新建的Welcome.aspx页面的Page_Load方法中,显示接收的用户ID和他当时登录的时间:

protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write("欢迎用户" + Session["UserName"].ToString() + "登录本系统<br>");
            Response.Write("您登陆的时间是" + Session["LoginTime"].ToString());
        }

执行程序,效果如下:

session中放值 session中存放对象_Click_02


session中放值 session中存放对象_Text_03

后台管理系统

设计一个登录页面,登录后在后台首页中使用Session对象判断用户登录状态:如果成功,则绑定欢迎语并显示页面内容,否则返回登录页面。

效果展示:

session中放值 session中存放对象_Text_04


session中放值 session中存放对象_session中放值_05


session中放值 session中存放对象_用户名_06


Login.aspx页面关键代码展示:

CSS:

<style type="text/css">
        .auto-style1{
            width:369px;
            height:137px;
        }
        .auto-style2{
            height:42px;
        }
        body{
            width:100%;
            height:100%;
            background-color:aqua;
        }
    </style>

HTML:

<div>
            <table align="center" class="auto-style1">
                <tr style="text-align:center;">
                    <td Width="80" class="auto-style2">用户名</td>
                    <td Width="200" class ="auto-style2"><asp:TextBox ID="UserName" runat="server" Width="190"></asp:TextBox></td>
                </tr>
                <tr style="text-align:center;">
                    <td Width="80" class ="auto-style2">密 码</td>
                    <td Width="200"><asp:TextBox ID="UserPwd" TextMode="Password" runat="server" Width="190"></asp:TextBox></td>
                </tr>
                <tr style="text-align:center;"><td colspan="2">
                    <asp:Button ID="btnLogin" runat="server" Text="登录" Height="30px" Width="95px" OnClick="btnLogin_Click" /></td></tr>
            </table>
        </div>

Login.aspx.cs代码展示:

protected void btnLogin_Click(object sender, EventArgs e)
        {
            string name = this.UserName.Text.Trim();
            string pwd = this.UserPwd.Text.Trim();
            if (name == "admin" && pwd == "admin")
            {
                Session["NickName"] = "管理员";
                Response.Redirect("~/Welcome.aspx");
            }
            else
            {
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "Login", "alert(\"用户名或密码错误,请重试\")", true);
            }
        }

Welcome.aspx页面代码:

CSS

<style>
        body{
            margin:0px;
            padding:0px;
        }
        #myhead{
            height:40px;
            line-height:40px;
            background-color:aquamarine;
            color:#fff;
            font-size:14px;
        }
        table tr th{
            height:30px;
        }
        table tr td{
            height:25px;
            text-align:center;
        }
    </style>

HTML:

<div>
            <div id="myhead" runat="server"></div>
            <div id="mybody" runat="server">
                <table align="center" width="100%" height="100%">
                    <tr><th>id</th><th>姓名</th><th>性别</th><th>年龄</th></tr>
                    <tr><td>1</td><td>张三</td><td>男</td><td>23</td></tr>
                    <tr><td>2</td><td>甲一</td><td>女</td><td>20</td></tr>
                    <tr><td>3</td><td>王五</td><td>女</td><td>21</td></tr>
                    <tr><td>4</td><td>李四</td><td>男</td><td>20</td></tr>
                    <tr><td>5</td><td>甲二</td><td>女</td><td>23</td></tr>
                    <tr><td>6</td><td>乙三</td><td>男</td><td>24</td></tr>
                </table>
            </div>
        </div>

Welcome.aspx.cs页面代码:

protected void Page_Load(object sender, EventArgs e)
        {
            object obj = Session["NickName"];
            string NickName = null;
            if (obj != null && (NickName = obj.ToString()) != "")
            {
                this.myhead.InnerHtml = "<span>&<nbsp>; 您好" + NickName + ",欢迎登录后台系统。</span>";
            }
            else
            {
                Response.Redirect("~/Login.aspx");
            }
        }