欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解ASP.NET中Session的用法

程序员文章站 2023-12-13 11:59:22
      当用户在应用程序的页之间跳转时,存储在 session 对象中的变量不会清除,而用户在应用程序中访问页面时,这...

      当用户在应用程序的页之间跳转时,存储在 session 对象中的变量不会清除,而用户在应用程序中访问页面时,这些变量始终存在。当用户请求来自应用程序的 web 页时,如果该用户还没有会话,则 web 服务器将自动创建一个 session 对象。当会话过期或被放弃后,服务器将终止该会话。

       通过向客户程序发送唯一的 cookie 可以管理服务器上的 session 对象。当用户第一次请求 asp 应用程序中的某个页面时,asp 要检查 http 头信息,查看是否有在报文中有名为 aspsessionid 的 cookie 发送过来,如果有,则服务器会启动新的会话,并为该会话生成一个全局唯一的值,在把这个值作为新 aspsessionid cookie 的值发送给客户端,正是使用这种 cookie,可以访问存储在服务器上的属于客户程序的信息。session 对象最常见的作用就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 session 对象中。另外其还经常被用在鉴别客户身份的程序中。要注意的是,会话状态仅在支持 cookie 的浏览器中保留,如果客户关闭了 cookie 选项,session 也就不能发挥作用了。 

(一)session的基本属性:

一、属性

1、sessionid

       sessionid 属性返回用户的会话标识。在创建会话时,服务器会为每一个会话生成一个单独的标识。会话标识以长整形数据类型返回。在很多情况下 sessionid 可以用于 web 页面注册统计。

2、timeout

       timeout 属性以分钟为单位为该应用程序的 session 对象指定超时时限。如果用户在该超时时限之内不刷新或请求网页,则该会话将终止。

二、方法

       session 对象仅有一个方法,就是 abandon,abandon 方法删除所有存储在 session 对象中的对象并释放这些对象的源。如果您未明确地调用 abandon 方法,一旦会话超时,服务器将删除这些对象。当服务器处理完当前页时,下面示例将释放会话状态。 

< % session.abandon %>

三、事件

session 对象有两个事件可用于在 session 对象启动和释放是运行过程。

1、session_onstart 事件在服务器创建新会话时发生。服务器在执行请求的页之前先处理该脚本。session_onstart 事件是设置会话期变量的最佳时机,因为在访问任何页之前都会先设置它们。

       尽管在 session_onstart 事件包含 redirect 或 end 方法调用的情况下 session 对象仍会保持,然而服务器将停止处理 global.asa 文件并触发 session_onstart 事件的文件中的脚本。

       为了确保用户在打开某个特定的 web 页时始终启动一个会话,就可以在 session_onstart 事件中调用 redirect 方法。当用户进入应用程序时,服务器将为用户创建一个会话并处理 session_onstart 事件脚本。您可以将脚本包含在该事件中以便检查用户打开的页是不是启动页,如果不是,就指示用户调用 response.redirect 方法启动网页。程序如下 :

< script runat=server language=vbscript>
sub session_onstart
startpage = "/myapp/starthere.asp"
currentpage = request.servervariables("script_name")
if strcomp(currentpage,startpage,1) then
response.redirect(startpage)
end if
end sub
< /script>

       上述程序只能在支持 cookie 的浏览器中运行。因为不支持 cookie 的浏览器不能返回 sessionid cookie,所以,每当用户请求 web 页时,服务器都会创建一个新会话。这样,对于每个请求服务器都将处理 session_onstart 脚本并将用户重定向到启动页中。 

2、session_onend 事件在会话被放弃或超时发生。

       关于使用 session 对象需要注意的事项 application 对象相近,请参照前文。

       会话可以通过以下三种方式启动 :

1)、一个新用户请求访问一个 url,该 url 标识了某个应用程序中的 .asp 文件,并且该应用程序的 global.asa 文件包含 session_onstart 过程。

2)、用户在 session 对象中存储了一个值。

3)、用户请求了一个应用程序的 .asp 文件,并且该应用程序的global.asa 文件使用 < object> 标签创建带有会话作用域的对象的实例。

       如果用户在指定时间内没有请求或刷新应用程序中的任何页,会话将自动结束。这段时间的默认值是 20 分钟。可以通过在 internet 服务管理器中设置“应用程序选项”属性页中的“会话超时”属性改变应用程序的默认超时限制设置。应依据您的 web 应用程序的要求和服务器的内存空间来设置此值。例如,如果您希望浏览您的 web 应用程序的用户在每一页仅停留几分钟,就应该缩短会话的默认超时值。过长的会话超时值将导致打开的会话过多而耗尽您的服务器的内存资源。对于一个特定的会话,如果您想设置一个小于默认超时值的超时值,可以设置 session 对象的 timeout 属性。例如,下面这段脚本将超时值设置为 5 分钟。

< % session.timeout = 5 %>

       当然你也可以设置一个大于默认设置的超时值,session.timeout 属性决定超时值。你还可以通过 session 对象的 abandon 方法显式结束一个会话。例如,在表格中提供一个“退出”按钮,将按钮的 action 参数设置为包含下列命令的 .asp 文件的 url。 

< % session.abandon %>

(二)session的用法:

一、使用session设定权限
session简介:
简单来说就是服务器给客户端的一个编号。当一台www服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站。当每个用户首次与这台www服务器建立连接时,他就与这个服务器建立了一个session,同时服务器会自动为其分配一个sessionid,用以标识这个用户的唯一身份。这个sessionid是由www服务器随机产生的一个由24个字符组成的字符串。
-session的初次使用

protected void page_load(object sender, eventargs e)
{//这是页面的初始化
  if (!page.ispostback)
  {//判断是否为初次执行
   if (object.equals(session["adminname"], null))
   {//判断在session["adminname"]是否存在值
    response.redirect("errorpage.aspx", true);
   }
   else
   {//要是存在则记录下这个人的用户名
   name.text = session["adminname"].tostring();
   }
  }
}

二、进行页面传值

在页面之间传递信息有许多方式:
第一:可以使用querystring
第二:可以使用session
第三:server.transfer
这三种传值方式都有利有弊,下面我以我的经验给大家讲解一下
首先:querystring
querystring是一种非常简单的传值方式,其缺点就是会把要传递的值显示在浏览器的地址栏中,并且此方法不能够传递对象。如果你想传递一个安全性不是那么重要或者是一个简单的数值时。使用此方式最好不过。
下面通过一个小例子来说明一下
1.创建一个web页面,叫sendmessage.aspx
2.在页面内添加两个textbox,叫txtname,txtemail,与一个button,叫submit

 protected void submit_click(object sender, eventargs e)
 {
  string url = "receivemessage.aspx?name=" +
  txtname.text + "&email=" + txtemail.text;
  response.redirect(url);
 }

3.再创建一个接收信息页面,叫receivemessage.aspx
4.在页面内添加两个label,叫lbname,lbemail

 protected void page_load(object sender, eventargs e)
 {//使用request来接收由上个页面传递过来的值,分别显示在页面上
  lbname.text = request.querystring["name"];
  lbemail.text = request.querystring["email"];
 }

-再次:使用session变量
使用session变量传值是一种最常见的方式了,此种方式不仅可以把值传递到下一个页面,还可以交叉传递到多个页面,直至把session变量的值remove后,才消失
下面举例说明
1.创建一个页面,叫sendsession
2.在页面内添加两个textbox,叫txtname,txtemail,添加一个button,叫submit

 protected void submit_click(object sender, eventargs e)
 {//可以使用session的add方法
  session["name"] = txtname.text;
  //可以使用session.add("name",txtname.text);
  session["email"] = txtemail.text;
  //可以使用session.add("email",txtemail.text);
  response.redirect("receivemessage.aspx");
 }

3.再创建一个页面,叫receivemessage.aspx
4.在页面内添加两个label,叫lbname,lbemail

 protected void page_load(object sender, eventargs e)
 {
  lbname.text = session["name"].tostring();
  lbemail.text = session["email"].tostring();
  session["name"].remove();
  session["email"].remove();
  //使用结束要清除session中的值
 }

这是使用session传递数值,此方式耗费服务器的资源,尽量少使用
-再次:使用server.transfer
这种传递方式有点复杂,但也可以是一种值传递方式
下面举例说明一下:
1.创建一个页面,叫sendmessage.aspx
2.在页面内添加两个textbox,叫txtname,txtemail,添加一个button,叫submit

 protected void submit_click(object sender, eventargs e)
 {
  server.transfer("receivemessage.aspx");
 }
//再添加一个属性
 public string name
 {
  get
  {
   return txtname.text;
  }
 }
 public string email
 {
  get
  {
   return txtemail.text;
  }
 }

3.再创建一个页面,叫receivemessage.aspx
4.在页面放两个label,叫lbname,lbemail

 protected void page_load(object sender, eventargs e)
 {
  //创建原始窗体的实例sendmessage wf1
  //获得实例化的句柄
  wf1=(sendmessage)context.handler;
  label1.text=wf1.name;
  label2.text=wf1.email;
 }

以上就是本文的全部内容,希望对大家学习理解asp.net中session的用法有所帮助。

上一篇:

下一篇: