smhy8187

 

session

session
点击数:598    发布日期:2007-3-5 18:21:00  
【收藏】 【评论】 【打印】 【编程爱好者论坛】 【关闭】

 

什么是session?Session直接翻译成中文比较困难,一般都译成时域。在计算机专业术语中,Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间。具体到Web中的Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。因此从上述的定义中我们可以看到,Session实际上是一个特定的时间概念。
   需要注意的是,一个Session的概念需要包括特定的客户端,特定的服务器端以及不中断的操作时间。A用户和C服务器建立连接时所处的Session同B用户和C服务器中建立连接时所处的Sessions是两个不同的Session。
   那什么是Session的解决方案呢?我们知道,用户访问一个网站时往往需要浏览许多网页。对于一个通过PHP构筑的网站来说,用户在访问的过程中需要执行许多的PHP脚本。然而由于HTTP协议自身的特点,用户每执行一个PHP脚本都需要和Web服务器重新建立连接。又由于无状态记忆的特点,此次连接无法得到上次连接的状态。这样,用户在一个PHP脚本中对一个变量进行了赋值操作,而在另外一个PHP脚本中却无法得到这个变量的值。例如,用户在负责登录的PHP脚本中设置了$user="wind",却无法在另一个PHP脚本中通过调用$user来获得“wind”这个值。也就是说,在PHP中无法设置全局变量。每个PHP脚本中所定义的变量都是只在这个脚本内有效的局部变量。
   Session解决方案,就是要提供在PHP脚本中定义全局变量的方法,使得这个全局变量在同一个Session中对于所有的PHP脚本都有效。上面我们提到了,Session不是一个简单的时间概念,一个Session中还包括了特定的用户和服务器。因此更详细地讲,在一个Session定义的全局变量的作用范围,是指这个Session所对应的用户所访问的所有PHP。
  例如A用户通过Session定义了一个全局变量$user=“wind”中,而B用户通过Session定义的全局变量$user=“jane”。那么在A用户所访问的PHP脚本中,$user的值就是wind。

Session其实指的就是访问者从到达某个特定主页到离开为止的那段时间。每一访问者都会单独获得一个Session。在Web应用程序中,当一个用户访问该应用时,Session类型的变量可以供这个用户在该Web应用的所有页面中共享数据;如果另一个用户也同时访问该Web应用,他也拥有自己的Session变量,但两个用户之间无法通过Session变量共享信息,而Application类型的变更则可以实现站点多个用户之间在所有页面中共享信息。

1、SessionID属性
  该属性返回当前会话的唯一标志,为每一个Session分配不同的编号。
  我曾在开发过程中就遇到对用户的控制问题。它要实现的功能就是,针对某个网站的一个模块,当一个会员登录后正在看此模块时,另一个人用同样的会员名登录,就不能浏览这个模块。也就是说一个会员名同时只能一个人浏览此模块。我通过用会员名(假设为UserID,唯一)和SessionID来实现了控制。当会员登录时,给这个会员一个Session记录登录状态如:Session("Status")="Logged",同时把这个会员的Session.SessionID写入数据库。当他要浏览此模块时,先判断其是否登录,若已经登录再判断它的SessionID是否与数据库记录的相同,如果不同则不能访问。这样,当另一个用户用相同的会员名登录时,那么数据库中记录的就是新的SessionID,前者访问此模块时就不能通过检查。这就实现了一个会员名同时只能一个人浏览某个模块。这个功能在一些收费网站有很有特别作用,它防止了一个会员名给多个人浏览的问题,为公司保障了利益。


 

2、TimeOut属性
  该属性用来定义用户Session对象的时限。如果用户在规定的时间内没有刷新网页,则Session对象就会终止。一般默认为20分钟。  


 

3、Abandon方法
  该方法是Session对象的唯一方法,可以清除Session对象,用来消除用户的Session对象并释放其所占的资源。如: <% Session.Abandon %>
4、Session_OnStart和Session_OnEnd事件
  和Application一样,当对象的例程每一次启动时触发Session_OnStart事件,然后运行Session_Onstart事件的处理过程。也就是说,当服务器接收到应用程序中的URL的HTTP请求时,触发此事件,并建立一个Session对象。同理,这个事件也必须定在Global.asa文件中。
  当调用Session.Abandon方法时或者在TimeOut的时间内没有刷新,这会触发Session_OnEnd事件,然后执行里面的脚本。Session变量与特定的用户相联系,针对某一个用户赋值的Session变量是和其他用户的Session变量完全独立的,不会存在相互影响。
Session应用一列:
  与Application一样,一个被定义为Session类型的数组只能将整个数组作为一个对象,用户不能直接改变Session数组中某个元素的值。为了创建一个Session数组,需先定义一个普通的数组,并对它的每一个元素赋初值,最后把它定义为一个Session数组。如:
<%
dim array()
array=array("jeff","zhu","male")
Session("info")=array
Response.write Session("info")(0) &"-"
Response.write Session("info")(1) &"-"
Response.write Session("info")(2) &"<br>"
%>
<hr>
<%
array(0)="jun"
array(1)="li"
array(2)="female"
Session("info")=array
Response.write Session("info")(0) & "-"
Response.write Session("info")(1) & "-"
Response.write Session("info")(2) & "<br>"
%>
  以上这段程序输出结果是:
           jeff-zhu-male
           _____________
           jun-li-female

posted on 2008-04-16 20:06  new2008  阅读(158)  评论(0编辑  收藏  举报

导航