Asp.net内置对象之Session

目录索引

一、Session对象的概述

1.Session对象的基本概念

Session英文意思是:“会话、开会”,这是很基础的了解啦。使用Session对象可以存储不同用户个人会话所需的信息。当用户在Web应用 程序的程序之间跳转时,存储在Session的变量不会被清除,而始终存在,只要客户浏览器接入一个Web服务器,在服务器中就会创建一个具有该用户专用 ID号的Session对象,在其中可以存放上线用户的私有变量信息,只要用户不下线,自己的Session变量存在;一旦用户下线,Session变量 会消失。如果Web服务器停止了,Session变量也会消失。

2.Session对象的工作机制

ASP.NET中可以通过向客户程序发送唯一的Cookie来管理服务器上的Session对象。如果客户端浏览器关闭Cookie支持,则服务器端的Session功能也会失效。正是使用这种Cookie,服务器可以访问存储在服务器上的属于客户程序的信息。

注意:会话状态仅在支持cookie的浏览器中保留,如果客户关闭了浏览器中的Cookie选项,Session也就不能发挥作用了。

在ASP.NET中使用Session变量应该注意:

(1).Session变量不用声明就可以使用
(2).Session变量可以在Web应用程序的多个程序之间传送数据、但是跨越网站和Web应用程序则Session变量失效
(3).为了防止服务器崩溃,应避免使用Session变量对象。尤其是包含大量数据的数据库对象,很容易使服务器崩溃

Session对象是HttpSessionState类的一个实例,它有以下四个常用的属性

二、Session对象的属性

(1).SessionID
(2).Timeout
(3).Count
(4).IsCookieless

1.SessionID属性

SessionID属性返回用户的会话标识

在用户第一次访问网页创建会话时,服务器会产生一个相应的Session对象,该Session对象具有与其他会话不同的标识。该标识就是Session对象的SessionID属性。会话标识以长整数类型返回。

在客户端,浏览器会将本次会话的SessionID值存入到本地的Cookie中,当再次向服务器提出页面请求时,该SessionID值将作为 Cookie信息传送给服务器,服务器就可以根据该值找到此次会话以前在服务器上存储的信息。当重新开启一个页面的时候,该值都会变化,而且永远不会重 复。

实际上当不希望依赖于cookie时,可以将 webconfig 文件中的sessionState标签对应的cookieless的值改"true" ,此时sessionid被附加于url中

2.Timeout属性

Timeout属性设置应用程序会话状态的超时时限,以分钟为单位。

每一个与Web服务器建立连接的客户端都拥有独立的会话进程,Web服务器管理这些进程时需要占用一定的系统资源。在现实生活中,有些用户在浏览网 页的过程中,可能要去处理其他事件而没有关闭与服务器的连接。在这种情况下,如果服务器一直在管理与此相关的会话进程,就会造成系统资源的浪费。因此,当 用户联机后,在一段时间内没有刷新或请求网页,就可以考虑结束会话进程。

若要设置在会话状态提供程序终止会话之前各请求之间所允许的超时期限,设置Session对象的Timeout属性即可。默认值为20min。 Timeout属性以分钟为单位为该应用程序的Session对象指定超时时限。如果用户在该超时时限之内不刷新网页,则该会话将终止。设置 Timeout属性的语法如下:
    Session.Timeout = nMinutes;
参数nMinutes:指定会话空闲多少分钟后服务器自动终止该会话。默认值为20。
下面的语句将设置Session的过期时间为30min。
    Session.Timeout = 30;
3.Count属性

Count属性设置Session对象包含的所有变量个数的总和。
提示:

除了内置的属性外,Session对象也可以像Application对象一样设置并使用自定义属性,这些自定义的Session对象属性实际上就是上线用户的私有变量。因此可以利用Session对象的变量在ASP.NET文件之间传送输值、字符串、数组和对象。

 

   1:   Response.Write(Session.SessionID);//随机分配一个SessionID,每次重新打开都不一样如:4w5noyiwpnh0ztm0cymzlo1e
   2:   Response.Write(Session.Timeout);//默认20分钟
   3:   Response.Write(Session.Count);//设置Session对象包含的所有变量个数的总和。


三、Session对象的事件

(1).Session_End事件
(2).Session_Start事件

Session_Start事件在Session对象启动时发生,Session_End事件在Session对象释放时发生。这两个事件的处理程序都放在Web应用程序的Global.asax(全局应用程序类)文件中。

1.Session_End事件:

服务器在执行请求的页之前先处理该脚本。Session_Start事件是设置会话期变量的最佳时机,因为在访问任何页之前都会先访问它们。所有对 象(Application、ObjectContext、Request、Response、Server 和 Session)都可以在Session_Start事件脚本中使用。

2.Session_End事件在会话被放弃或超时发生

Session_End事件在会话被放弃或超时发生。在服务器对象中,只有Application、Server和Session对象可以在Session_End事件脚本中使用。Session_End事件处理程序可以对一些重要的个人信息做适当处理,比如存入磁盘中。

四、Session对象的方法

(1).Clear方法:清除所有Session对象所属变量的值
(2).Remove方法:清除某一个Session变量
(3).Removerall方法:清除所有Session变量
(4).Abandon方法:清除所有Session变量

Session对象的Abandon方法用于删除所有存储在Session对象中的对象并释放这些对象的资源。如果未明确地调用Abandon方法,一旦会话超时,服务器将删除这些对象。使用Abandon方法的语法如下:
Session.Abandon;

需要注意的是:Abandon方法被调用时,将按顺序删除当前的Session对象,不过在当前页中所有脚本命令都处理完后,对象才会被真正删除。这就是说,在调用Abandon时,可以在当前页上访问存储在Session对象中的变量,但在随后的Web页上则不行。
但是,利用Clear方法、Remove方法和Removeall方法后,效果会立即生效。

Session.Abandon()方法的使用

复制代码
 1  Session["Test"] = "我是BeginMan";
 2         Response.Write(Session["Test"]+"<br>");
 3         //使用Session.Abandon()方法
 4 
 5         //Session.Abandon();//它不会在调用语句处就结束会话,而会等待当前页面完成处理,再结束会话。----此时输出两个“我是BeginMan”
 6         
 7         //使用Clear()、Remove()、Removeall()方法
 8                 /*-----------区别--------------
 9                  * Session.Clear();从会话状态集合中移除所有的键和值
10                   Session.RemoveAll();从会话状态集合中移除所有的键和值
11                   Session.Remove();删除会话状态集合中的项
12                  */
13         
14         Session.Clear();//删除所有存储在Session对象中的对象并释放这些对象的资源。----此时输入一个“我是BeginMan”
15         Session.RemoveAll();//同上
16         Response.Write(Session["Test"]);//再次输出
17 
18         //提示:以上这些使用之后,在其他页面则Session["Test"]不可调用了、因为已经删除。
复制代码

五、Session实例

复制代码
 1  Default3.aspx
          protected void Button1_Click(object sender, EventArgs e)
 2     {
 3         //登陆
 4         Session.Add("User", TextBox1.Text);//Session.Add(string name,object Value)向会话状态集合中添加一个新项
 5         Session.Add("pwd", TextBox2.Text);
 6         //或者:
 7          //Session["User"] = TextBox1.Text;
 8          //Session["pwd"] = TextBox2.Text;
 9         Response.Redirect("Default4.aspx");
10     }
复制代码
复制代码
 1 Default4.aspx
 2 protected void Page_Load(object sender, EventArgs e)
 3     {
 4         if (Session["User"] == null || Session["pwd"] == null)
 5         {
 6             Label1.Text = "无权访问,请身份登陆";
 7             LinkButton1.CommandName = "err";
 8             LinkButton1.Text = "登陆";
 9         }
10         else
11         {
12             if((Session["User"].ToString()=="BeginMan")&&(Session["pwd"].ToString()=="123"))
13             {
14                 Label1.Text = "欢迎光临";
15                 LinkButton1.CommandName = "ok";
16                 LinkButton1.Text = "退出";
17             }
18             else
19             {
20                 Label1.Text = "无权访问,请身份登陆";
21                 LinkButton1.CommandName = "err";
22                 LinkButton1.Text = "登陆";
23             }
24         }
25     }
26     protected void LinkButton1_Click(object sender, EventArgs e)
27     {
28         //LinkButton
29         if (LinkButton1.CommandName == "err")
30         {
31             Response.Redirect("Default3.aspx");
32         }
33         else
34         {
35             Session.Clear();
36             Response.Redirect("Default3.aspx");
37         }
38         -----------http://www.cnblogs.com/BeginMan/
39     }
复制代码

--------------------------------------

欢迎您,进入 我系程序猿 的cnBlog博客。

你不能改变你的过去,但你可以让你的未来变得更美好。一旦时间浪费了,生命就浪费了。

You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.

--------------------------------------

分享到QQ空间  

原文地址:https://www.cnblogs.com/jqmtony/p/2910811.html