asp中的session使用方法

session 在所有的后台语言里面都是可以直接访问得,例如要创建一个名为user的session:

session(“user”) = “username”

改变一个session

session(“user”) = “username1”

一、Session 对象
可以使用 Session 对象存储特定用户会话所需的信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。
Session 对象最常见的一个用法就是存储用户的登录信息或者用户设置。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。
注意: 会话状态仅在支持 cookie 的浏览器中保留。

语法
Session的集合|属性|方法:
1.集合
Contents 包含已用脚本命令添加到会话中的项目。
StaticObjects 包含通过 <OBJECT> 标记创建的并给定了会话作用域的对象。
2.属性
CodePage 将用于符号映射的代码页。
LCID      现场标识。
SessionID 返回用户的会话验证。
Timeout 应用程序会话状态的超时时限,以分钟为单位。
3.方法
Abandon 该方法破坏 Session 对象并释放其资源。
4.事件
global.asa 文件中声明下列事件的脚本。
Session_OnEnd
Session_OnStart
注:global.asa 文件只有在网站根目录时才有效.
举例:
可以在 Session 对象中存储值。存储在 Session 对象中的信息在会话及会话作用域内有效。下列脚本演示两种类型的变量的存储方式。
<%
Session(“username”) = “Janine”
Session(“age”) = 24
%>
但是,如果将对象存储在 Session对象中,而且使用 VBScript 作为主脚本语言。则必须使用关键字 Set。如下列脚本所示。
<% Set Session(“Obj1”) = Server.CreateObject(“MyComponent.class1”) %>
然后,就可以在后面的 Web 页上调用 MyComponent.class1 揭示的方法和属性,其调用方法如下:
<% Session(“Obj1”).MyMethod %>
也可以通过展开该对象的本地副本并使用下列脚本来调用:
<%
Set MyLocalObj1 = Session(“Obj1”)
MyLocalObj1.MyObjMethod
%>
创建有会话作用域的对象的另一种方法是在 global.asa 文件中使用 <OBJECT> 标记。
但是不能在 Session 对象中存储内建对象。例如,下面每一行都将返回错误。
<%
Set Session(“var1”) = Session
Set Session(“var2”) = Request
Set Session(“var3”) = Response
Set Session(“var4”) = Server
Set Session(“var5”) = Application
%>
在将对象存储到 Session 对象之前,必须了解它使用的是哪一种线程模型。只有那些标记为“Both”的对象才能存储在没有锁定单线程会话的 Session 对象中。
若将一个数组存储在 Session对象中,请不要直接更改存储在数组中的元素。例如,下列的脚本无法运行。
<% Session(“StoredArray”)(3) = “new value” %>
这是因为 Session对象是作为集合被实现的。数组元素 StoredArray(3) 未获得新的赋值。而此值将包含在 Application 对象集合中,并将覆盖此位置以前存储的任何信息。
在将数组存储在 Session对象中时,在检索或改变数组中的对象前获取数组的一个副本。在对数组操作时,应再将数组全部存储在 Session 对象中,这样所做的任何改动将被存储下来。下列的脚本对此进行演示。
—file1.asp—
<%
‘Creating and initializing the array
Dim MyArray()
Redim MyArray(5)
MyArray(0) = “hello”
MyArray(1) = “some other string”
‘Storing the array in the Session object
Session(“StoredArray”) = MyArray
Response.Redirect(“file2.asp”)
%>
—file2.asp—
<%
‘Retrieving the array from the Session Object
‘and modifying its second element
LocalArray = Session(“StoredArray”)
LocalArray(1) = ” there”
‘printing out the string “hello there”
Response.Write(LocalArray(0)&LocalArray(1))
‘Re-storing the array in the Session object
‘This overwrites the values in StoredArray with the new values
Session(“StoredArray”) = LocalArray
%>
示例
下列代码将字符串 MyName 分配给名为 name 的会话变量,并给名为 year 的会话变量指定一个值,而且为 some.Obj 组件的实例指定一个名为 myObj 的变量。
Session(“name”) = “MyName”
Session(“year”) = 96
Set Session(“myObj”) = Server.CreateObject(“someObj”)
%>
二、如何取得所有的Session变量  
在程序调试中,有时候需要知道有多少Session变量在使用,她们的值如何?由于Session对象提供一个称为Contents的集合(Collection),我们可以通过For…Each循环来达到目标:
Dim strName, iLoop
For Each strName in Session.Contents
Response.Write strName & ” – ” & Session.Contents(strName)& “<BR>”
Next
一般情况下,上面的代码可以工作得很好。但当Session变量是一个对象或者数组时,打印的结果就不正确了。
这样我们修改代码如下:
‘首先看看有多少Session变量在使用?
Response.Write “共有 ” & Session.Contents.Count &”个 Session 变量<P>”
Dim strName, iLoop
‘使用For Each循环察看Session.Contents
For Each strName in Session.Contents
‘如果Session变量是一个数组?
If IsArray(Session(strName)) then
   ‘循环打印数组的每一个元素
   For iLoop = LBound(Session(strName)) to UBound(Session(strName))
    Response.Write strName & “(” & iLoop & “) – ” & _
    Session(strName)(iLoop) & “<BR>”
   Next
Elseif isObject(Session(strName)) then
   Response.Write “isobject:”& strName & ” – ” & Session.Contents(strName)& “<BR>”
else
   ‘其他情况,就简单打印变量的值
   Response.Write strName & ” – ” & Session.Contents(strName) & “<BR>”
End If
Next
三、Session变量有时候不能工作,为什么?
有很多可能性:
第一,如果客户端不允许cookie操作,session将失效。因为session是依赖于cookie的。
第二,session有失效时间的设定。缺省的设置是20分钟。你可以在ASP中设置:Session.timeout=60 ;或者在IIS中设置站点属性的连接超时秒数。
第三,session是和具体的Web Application相关的。如果用户从/products/default.asp浏览到/jobs/default.asp,也可能造成session的重新创建。
四、怎么清除一个不再需要的session变量但不使session失效?
在ASP3.0中:Session.Contents.Remove ”变量名”可以清除一个变量。
在ASP2.0中:set session(“变量名”)=NULL(对象)或 session(“变量名”)=empty(字符串或数值)可以清除变量。
在ASP3.0中,Session.Contents.RemoveAll可以清除所有的session变量和session.abandon不同,上面的方法都不会使目前的session过期或者无效。
五、ASP页面顶端的<%@ ENABLESESSIONSTATE=True %>是什么意思?
IIS使用一种叫做Session跟踪的技术,来保证各个Session变量在每个页面是可用的。当用户访问某个ASP页面时候,IIS会首先为这个页面准备好各个Session变量,这当然会带来性能上的影响。(使用Session变量的代价总是很高的!)
如果你有100个页面,而只有5个页面用到了Session,那么,为了整体的性能,你只需要在那5个页面设置:
<%@ ENABLESESSIONSTATE=True %>
而其他页面设置为:
<%@ ENABLESESSIONSTATE=False %>

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注