发新话题
打印

[方法技巧] asp---Session对象

asp---Session对象

Session其实指的就是访问者从到达某个特定主页到离开为止的那段时间。每一访问者都会单独获得一个Session。在Web应用程序中,当一个用户访问该应用时,Session类型的变量可以供这个用户在该Web应用的所有页面中共享数据;如果另一个用户也同时访问该Web应用,他也拥有自己的Session变量,但两个用户之间无法通过Session变量共享信息,而Application类型的变更则可以实现站点多个用户之间在所有页面中共享信息。
5 s% w2 Z, F) v/ v, r# `( \/ \# c0 m8 a# [! E) Y4 b, y

! I; k5 f6 L5 i7 j1、SessionID属性! t& r- e, w" {
  该属性返回当前会话的唯一标志,为每一个Session分配不同的编号。
, D& N! l+ U+ u% W  我曾在开发过程中就遇到对用户的控制问题。它要实现的功能就是,针对某个网站的一个模块,当一个会员登录后正在看此模块时,另一个人用同样的会员名登录,就不能浏览这个模块。也就是说一个会员名同时只能一个人浏览此模块。我通过用会员名(假设为UserID,唯一)和SessionID来实现了控制。当会员登录时,给这个会员一个Session记录登录状态如:Session("Status")="Logged",同时把这个会员的Session.SessionID写入数据库。当他要浏览此模块时,先判断其是否登录,若已经登录再判断它的SessionID是否与数据库记录的相同,如果不同则不能访问。这样,当另一个用户用相同的会员名登录时,那么数据库中记录的就是新的SessionID,前者访问此模块时就不能通过检查。这就实现了一个会员名同时只能一个人浏览某个模块。这个功能在一些收费网站有很有特别作用,它防止了一个会员名给多个人浏览的问题,为公司保障了利益。
( J2 y% h  T9 x# H1 I/ v3 [8 D- U3 ~& i% I4 R# {
2、TimeOut属性  K" B8 J, o! _& M
  该属性用来定义用户Session对象的时限。如果用户在规定的时间内没有刷新网页,则Session对象就会终止。一般默认为20分钟。  - m. Z! U/ y4 x' G5 W3 C9 O

0 F7 |8 z5 T: r: U' s3、Abandon方法1 S6 M$ |4 s; t9 P2 u
  该方法是Session对象的唯一方法,可以清除Session对象,用来消除用户的Session对象并释放其所占的资源。如: <% Session.Abandon %>
5 E7 ]  p* D; p4、Session_OnStart和Session_OnEnd事件- |4 c7 @. [' y1 Q$ M2 u/ Z# ~
  和Application一样,当对象的例程每一次启动时触发Session_OnStart事件,然后运行Session_Onstart事件的处理过程。也就是说,当服务器接收到应用程序中的URL的HTTP请求时,触发此事件,并建立一个Session对象。同理,这个事件也必须定在Global.asa文件中。
7 K# F4 C  q- @' A* {3 \  当调用Session.Abandon方法时或者在TimeOut的时间内没有刷新,这会触发Session_OnEnd事件,然后执行里面的脚本。Session变量与特定的用户相联系,针对某一个用户赋值的Session变量是和其他用户的Session变量完全独立的,不会存在相互影响。
' B' J1 b* z" b' U1 o, YSession应用一列:
0 j7 n; r0 g) B& |$ c* M7 |' W7 K  与Application一样,一个被定义为Session类型的数组只能将整个数组作为一个对象,用户不能直接改变Session数组中某个元素的值。为了创建一个Session数组,需先定义一个普通的数组,并对它的每一个元素赋初值,最后把它定义为一个Session数组。如:
2 X) Y, s. j& B: f1 ?+ i<%1 o0 d9 P! f0 A) r! p" ~
dim array()
( t. D; ?/ D7 jarray=array("jeff","zhu","male")" V+ k8 n6 O1 g5 B5 a
Session("info")=array
3 n# Q) [8 i3 R1 {Response.write Session("info")(0) &"-"
3 W- F: T* r/ A) v; ^& `Response.write Session("info")(1) &"-"
$ }( k' I% N& G! Y# n. \5 e! |7 U& ?Response.write Session("info")(2) &"<br>"
6 s: j+ @. j- I/ C" [. U9 ^* t3 \' Z%>
0 @8 \8 ^* S; N0 J4 K<hr>( ]0 I& \4 v! F" C
<%# H! b2 ?! g$ a( ~8 Z
array(0)="jun"1 n, N6 z5 @1 a& x/ N, |/ v* z
array(1)="li"1 V4 k0 _+ _0 Z3 @& R& N
array(2)="female"* }& T9 ^9 _. S! Z+ K  [9 X; I
Session("info")=array
- ~6 H& e5 p8 ?2 y2 C9 oResponse.write Session("info")(0) & "-"9 l- o# i5 ~* E5 L: H
Response.write Session("info")(1) & "-"2 _2 l. a' g% i8 p4 C% a3 n8 R9 [
Response.write Session("info")(2) & "<br>". K4 D8 N& Z* G% L7 z
%>
; b/ I4 F2 H5 y5 X' y) x  以上这段程序输出结果是:  @/ k4 ]8 W7 P  h5 @2 l- X0 ^
           jeff-zhu-male+ r; f3 _+ g& n+ H- l  |- i: y
           _____________
4 R0 F' U6 q+ ]) I           jun-li-female
发新话题