当前位置: 首页 > 文章教程  > 计算机与互联网 > 网络编程

3.6Session对象

8/31/2020 8:52:25 PM 人评论

3.6Session对象

3.6 Session对象

学习目标

学习并掌握Session对象的使用方法。

3.6.1 Session对象功能描述

ASP.NET会话状态能当用户在构成Web应用程序的不同ASP.NET页面之间导航时,为用户存储和检索值。HTTP是无状态协议,这意味着Web服务器将页的每个HTTP请求都当作相互无关的请求进行处理;默认情况下,服务器不保留上一个请求期间使用的变量的值的任何信息。因此,如果要想生成需要维护某些跨请求状态信息的Web应用程序(如实现购物车、数据滚动等的应用程序),就可能会非常困难。ASP.NET会话状态将有限时间(Session.Timeout默认为20min)段内从同一个浏览器接收到的请求标识为一个会话(Session),并在该会话持续期间保留变量的值。

默认情况下,所有的ASP.NET应用程序都启用ASP.NET会话状态。使用Session属性(将会话变量的值存储为按名称索引的集合)可方便地设置和检索ASP.NET会话状态变量。ASP.NET默认情况下将会话信息存储在ASP.NET应用程序的内存空间。

3.6.2 定义和使用Session

1.定义Session变量

定义Session变量可以采取多种方法完成,下面的示例给出了3种不同定义Session变量的方法,效果等价。

Session.Contents.Add("var1", "1000");
Session.Add("var2", "2000");
Session["var3"] = "3000";

2.定义Session变量有效期

Session变量默认有效期为20min一般都能够正常使用,理解Session.Timeout属性的默认值为200min可以和屏幕保护的启动时间比较理解,例如屏幕保护程序的启动时间为20min,意思为用户200min内不操作计算机则屏幕保护程序启动,同样,Session.Timeout属性的默认值200min也是讲用户如果两次访问该变量的间隔时间超过了200min,服务器就自动释放该Session变量。当需要人为设置Session变量有效期时可以使用如下代码。

Session.Timeout = 30;

3.读取Session变量

读取Session变量可以采取多种方法完成,下面的示例给出了读取Session变量的不同方法,效果等价。另外用户还可以使用Session.SessionID获取当前的Session变量的唯一标识。

string var1 = Session.Contents["var1"].ToString();
string var2 = Session["var2"].ToString();

4.释放Session变量

默认情况下如果用户在有限时间内(Session.Timeout)没有访问指定的Session变量,那么Session变量(即Session.SessionID)将被系统自动释放,用户也可以人为强制释放,经常用于退出登录、注销等。代码如下:

Session.Abandon();

3.6.3 实例分析:使用Session完成一个会员登录系统

用户在通过HTTP协议访问一个主页时,每次连接时都要重新开始。因此,如果要判别某个用户是否曾经进入本网站,除了前面所讲的Cookies技术外还可以使用Session完成。当用户第一次访问网站时,可以定义Session变量存储在服务器端,当用户再次访问此网站时,则可以从Session对象的Contents集合中直接获取相关信息。网络上很多论坛、购物车、网站后台管理的登录系统就是使用Session来保存用户登录信息的。

本实例要给出的正是这种登录系统使用Session保存用户信息的实现方法,需要用到用户表信息,这里使用的用户数据库和3.4.10节的数据库脚本完全相同,数据库脚本代码不再给出。

(1)在ASP.NET网站项目StudyObject中添加页面myLogin.aspx,并在工具箱中的“标准”选项卡中选择相关控件添加到页面,布局页面如图3-19所示。

图3-19 页面myLogin.aspx设计窗口显示效果

(2)在图3-19中直接双击“登录”按钮进入该按钮的单击事件代码编写窗口,编写登录处理代码,接下来给出完成登录处理代码。(注意:myLogin.aspx.cs中必须导入操作数据SQL Server的命名空间,如“using System.Data.SqlClient;”)

protected void btnConfirm_Click(object sender, EventArgs e)
{
  string Username = txtUsername.Text.Trim();
  string Password = txtPassword.Text.Trim();
  SqlConnection conn = new SqlConnection();
  conn.ConnectionString = @"server=DUANKEQI;uid=sa;pwd=sa;
  database=userDB";
  string sqlString = "select Username,Password from userTable
  where Username='" + Username + "'";
  SqlDataAdapter sda = new SqlDataAdapter(sqlString, conn);
  DataSet ds = new DataSet();
  sda.Fill(ds);
if (ds.Tables[0].Rows.Count == 0)
{
  //说明输入的用户名不存在
  Response.Write("<script language='javascript'>alert('
用户名称输入错误');history.back();</script>");
  Response.End();
}
else
{
  //说明输入的用户名存在,再判断口令是否正确
  string Password_db = ds.Tables[0].Rows[0]["Password"].
  ToString();
  if (Password == Password_db)
  {
    //说明口令正确,于是定义Session变量以及有效期
    Session["Username"] = Username;
    //处理完毕后重定向到登录成功页面,比如为Success.aspx
    Response.Redirect("mySuccess.aspx");
  }
  else
  {
    //说明口令不正确
    Response.Write("<script language='javascript'>alert('
    口令输入错误');history.back();</script>");
    Response.End();
  }
    }
}//btnConfirm_Click

(3)在ASP.NET网站项目StudyObject中再添加页面mySuccess.aspx,作为登录成功后显示的页面,并在工具箱中的“标准”选项卡中选择相关控件添加到页面,布局页面如图3-20所示。

图3-20 页面mySuccess.aspx设计窗口显示效果

(4)在图3-20中右击,在弹出的快捷菜单中选择“查看代码”命令,进入my Success.aspx.cs代码编写窗口,编写Page_Load代码如下。

protected void Page_Load(object sender, EventArgs e)
{
  string Username = string.Empty;
  if (Session["Username"] == null)
  {
    Username = "";
  }
  else
  {
    Username = Session["Username"].ToString();
  }
  if (Username == "")
  {
    Response.Write("<script language='javascript'>alert('你没
   有登录不可以查看此页面');location.href='myLogin.aspx';</
   script>");
    Response.End();
  }
  lblUsername.Text = Username;
}

(5)在网页mySuccess.aspx中直接按Ctrl+F5组合键,页面首次运行效果如图3-21所示。

图3-21 页面mySuccess.aspx运行显示效果(1)

(6)在图3-21中单击“确定”按钮直接进入登录页面myLogin.aspx,如图3-22所示。

图3-22 页面myLogin.aspx运行显示效果

(7)在图3-22中如果输入错误的用户名和口令都会提示错误,最终返回到myLogin.aspx页面,正确输入用户名称"admin"和口令"1234"后,单击“登录”按钮,显示的即是登录成功后页面mySuccess.aspx显示的效果,如图3-23所示。

图3-23 页面mySuccess.aspx运行显示效果(2)

(8)另外登录成功页面严格讲还应做一个退出按钮,退出按钮事件代码就是让Session失效即可,即释放Session,代码如下:

Session.Abandon();

上一篇:3.5Server对象

下一篇:3.7本章小结

相关教程

共有条评论 网友评论

验证码: 看不清楚?