在ASP中,有两个内部对象可以进行一些信息存储,它们是 Application 对象和 Session 对象,其中 Application 对象是对于整个应用程序期间而言的,它对于所有访问网站的用户来讲是共享的,而 Session 是对于会话期间而言的,它仅对与当前用户存在。

Session对象简介

当您在计算机上操作某个应用程序时,您打开它,做些更改,然后关闭它,就很像一次对话(Session)。计算机知道您是谁,它清楚您在何时打开和关闭应用程序。然而,在因特网上问题出现了,由于HTTP地址无法保持状态,Web服务器并不知道您是谁以及您做了什么。

Session 对象的主要用途 是针对每个访问网站的用户来存储一些信息,例如,当用户登录后,我们可以在该用户的 Session 中存储信息来标识当前用户已经登录。

Session 的原理是这样的,当用户第一次访问网站时,IIS为这个用户分配了一个标识,这个标识是一列很长的随机字符串,这个随机字符串叫做SessionID,而后服务器将其发送给客户端时期保存在Cookies中,接下来用户再访问服务器上的其他页面时,服务器获得这个 SessionID,并从内存中获取和这个 SessionID 相关的数据,放在 Session对象的集合中。

Contents集合

我们可以在这个集合中存储当前用户的某些信息,例如下面的代码展示了如何存储和读取数据:

<%
'名字为username的Session集合中存储了一个“ZhangSan”字符串
Session.Contents("username") = "ZhangSan"
Dim UserName
'读取Session中的数据,可以省略Contents
'UserName = Session.Contents("username")和下面一样
UserName = Session("username")
Response.Write("<h2>" & UserName & "</h2>")
%>

Session对象有三个方法(Contents.RemoveContents.RemoveAllAbandon),用来删除 Session 集合中的数据或放弃当前的 Session。

第一个例子(SessionContents.asp)我们将演示如何使用 Remove、RemoveAll方法,代码如下:

...
<h3>当前SessionID值为 <%=Session.SessionID%></h3>
<h3>Session中存储数据</h3>
<%
'利用 Contents.Count 遍历 Session 的过程
Sub Traversal_P()
Dim i
For i = 1 To Session.Contents.Count
Response.Write("Session(""" & Session.Contents.key(i) & """) = " & Session.Contents(i))
Response.Write("<br>")
Next
End Sub
'For Each 遍历 Session.Contents 集合
Sub Traversal_E()
Dim x
For Each x In Session.Contents
Response.Write("Session(""" & x & """) = " & Session(x))
Response.Write("<br>")
Next
End Sub
'Session.Contents中存储了多个数据,如下
Session.Contents("username") = "ZhangSan"
Session.Contents("password") = "12345678"
Session.Contents("date")="2015/08/14"
Session.contents("author")="pchmonster"
'遍历 Contents 集合
Traversal_E()
%>
<hr>
<h3>删除名为username的数据</h3>
<%
'删除 username 数据
Session.Contents.Remove("username")
'重新遍历 Contents 集合
Traversal_P()
%>
<hr>
<h3>删除所有的Session数据</h3>
<%
'删除所有的数据
Session.Contents.RemoveAll()
Traversal_E()
%>
...

上面的代码运行后显示如下:

这些代码中演示了如何遍历Session.Contents集合的两种方法,请仔细看看。

第二个例子SessionAbandon.asp)演示了 Abandon 方法的效果,通过演示,我们看出来 RemoveAll 方法和 Abandon 方法的区别在于 RemoveAll 仅仅删除了当前的集合,但是客户还是使用同一个 SessionID(第一个例子中 SessionID 一直保持不变化)。而 Abandon 方法调用后,在当前页面仍然可以访问 Session 集合,在关闭页面或者刷新页面后,之前的 Session 会被删除(本例子中 SessionID 会变化)。

代码如下:

<%
'Abandon的使用后,在当前页面仍可以访问Session集合,关闭页面或刷新后
'会使Session被删除,SessionID也就会改变
Session.Abandon()
'首先我们要记录一下SessionID的值,存放到Cookies中
Dim numVisits, SID
Response.Cookies("numVisits").Expires = DateAdd("d", 10, Now)
Response.Cookies("SID").Expires = DateAdd("d", 10, Now)
SID = Request.Cookies("SID")
numVisits = Request.Cookies("numVisits")
If numVisits = "" or SID = "" Then
'如果是第一次运行该页面,则记录当前Sessio nID值
Response.Cookies("numVisits") = 1
Response.Cookies("SID") = Session.SessionID
%>
<h3>您这是第一次访问该页面,当前页面的SessionID为</h3>
<h2><%=Session.SessionID%></h2>
<%
Else
%>
<hr>
<h3>您这是第<%=numVisits%>次访问该页面,当前页面的SessioID为</h3>
<h2><%=Session.SessionID%></h2>
<h3>您第一次访问时的SessionID为</h3>
<h2><%=Request.Cookies("SID")%></h2>
<%
numVisits = numVisits + 1
Response.Cookies("numVisits") = numVisits
End If %>

第一次运行该页面,会先记录当前的 SessionID 到 Cookies 中,如下图:

多次刷新该页面或重新打开后,因为 Abandon 方法,会使 Session 删除,SessionID 会一直改变,如下图:


CodePage、SessionID、Timeout 属性

CodePage 属性定义了当前页面输出内容的字符集,这里的字符集以数字表示。例如

936 表示 Chinese Simplified (GB2312) 简体中文

950 表示 Chinese Traditional (Big5) 繁体中文

65001 表示 Unicode (UTF-8)

特别说明

<%@CODEPAGE="65001"%>作用于所有静态的字符串

Response.CodePage, Session.CodePage 作用于所有动态输出的字符串

Response.CodePage 作用范围只在于 a single response

Session.CodePage
的作用范围却是在 all responses in a session

SessionID 属性可以获得当前用户的 SessionID,有时候在客户端浏览器不支持 Cookies 的情况下,你可以将 SessionID 附加在客户端的 QueryString 变量中,从而标识每一个客户端。

Timeout 属性用于设定客户的 Session 超时期。客户对于 SessionID 并不是长期占有的,在其一段时间内没有和服务器端进行任何交互后,服务器端将放弃该 Session。

下面的代码(SessionCST.asp)中将演示这个三个属性的使用方法,代码如下:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
Session.CodePage = 65001
'作用于所有动态输出的字符串
%>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>CodePage、SessionID、TimeOut属性的应用</title>
</head>
<body>
<h3>当前页面使用的CodePage是:</h3>
<h2><%=Session.CodePage%></h2>
<hr>
<h3>当前页面的SessionID是:</h3>
<h2><%=Session.SessionID%></h2>
<hr>
<h3>当前页面Session默认超时时间为:</h3>
<h2><%=Session.Timeout%>分钟</h2>
</body>
</html>

运行后,效果如下:


示例代码下载

Session.rar

ASP入门(十)-Session对象的更多相关文章

  1. 18第一章 ASP.Net内建对象

    第一章        ASP.Net内建对象 第一章        ASP.Net内建对象 ASP.Net为保持用户的数据和信息,内建了许多对象,包括Application.Response.Requ ...

  2. ASP入门(十二)-Application对象

    在一起协同工作以完成某项任务的一组ASP文件称为一个应用程序.Application 对象用于把这些文件捆绑在一起. Application 对象用于在整个应用程序生存期间保存信息. Applicat ...

  3. IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题

    IT咨询顾问:一次吐血的项目救火   年后的一个合作公司上线了一个子业务系统,对接公司内部的单点系统.我收到该公司的技术咨询:项目启动后没有规律的突然无法登录了,重新启动后,登录一断时间后又无法重新登 ...

  4. 【转】asp.net中利用session对象传递、共享数据[session用法]

    来自:http://blog.unvs.cn/archives/session-transfer-method.html 下面介绍Asp.net中利用session对象传递.共享数据用法: 1.传递值 ...

  5. ASP.NET 使用application和session对象写的简单聊天室程序

    ASP.Net中有两个重要的对象,一个是application对象,一个是session对象. Application:记录应用程序参数的对象,该对象用于共享应用程序级信息. Session:记录浏览 ...

  6. ASP.NET Application,Session,Cookie和ViewState等对象用法和区别 (转)

    在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewState和Cache等.下面分别介绍它们的用法和区别. 方法 信息量大小 作用域和保 ...

  7. asp.net中利用session对象传递、共享数据[session用法]

    下面介绍Asp.net中利用session对象传递.共享数据用法: 1.传递值: 首先定义将一个文本值或单独一个值赋予session,如下: session[“name”]=textbox1.text ...

  8. ASP入门(二十二)-连接数据库

    ADO 简介 在 ASP 中访问数据库使用的 ADO 组件. ADO 是一项微软的技术. ADO 指 ActiveX 数据对象(ActiveX Data Objects). ADO 是微软的 Acti ...

  9. ASP入门(十五)- Global.asa

    Global.asa 文件是一个可选文件,它可包含被 ASP 应用程序中每个页面访问的对象.变量和方法的声明.所有合法的浏览器脚本都可以在 Global.asa 中使用. Global.asa 文件只 ...

随机推荐

  1. JAVA GC 图解

    http://www.cnblogs.com/hnrainll/archive/2013/11/06/3410042.html http://www.blogjava.net/ldwblog/arch ...

  2. 在ASP.NET MVC中使用typeahead.js支持预先输入,即智能提示

    使用typeahead.js可以实现预先输入,即智能提示,本篇在ASP.NET MVC下实现.实现效果如下: 首先是有关城市的模型. public class City { public int Id ...

  3. 利用进程ID获取主线程ID

    利用进程ID获取主线程ID,仅适用于单线程.多线程应区分哪个是主线程,区分方法待验证 (1)好像可以用StartTime最早的,不过通过线程执行时间不一定可靠,要是在最开始就CreateThread了 ...

  4. having只用来在group by之后,having不可单独用,必须和group by用。having只能对group by的结果进行操作

    having只能对group by的结果进行操作 having只能对group by的结果进行操作 having只能对group by的结果进行操作 having只用来在group by之后,havi ...

  5. Mybatis-Plus 多表联查分页

    原文:https://www.jianshu.com/p/759b6430ed5b 分析 使用的工程,依旧是 spring-boot,关于分页,官网给出了一个单表的 demo,其实多表分页实现原理相同 ...

  6. smartsvn学习(二)如何在Xcode下使用SVN

    1.Xcode4中苹果有自带的SVN软件------>Organizer------>Repositories   2.SVN checkout到本地后,删除本地file,对服务器有影响吗 ...

  7. WebLogic清理缓存

    如果发布到weblogic的工程,登录发现还是原来的代码错误,可尝试清理weblogic缓存: 1.在weblogic控制台中停止应用,删除部署的工程 2.登录weblogic服务器,删除以下目录中的 ...

  8. WordPress基础:wp_list_pages显示页面信息列表

    函数:wp_list_pages($args) 作用:列出某个分类下的分类项目 常见参数说明: 参数 用途  值   sort_column  排序方式 post_title 按标题排序 [默认] m ...

  9. WordPress主题开发:WP_Query使用分页实例

    functions.php加入 <?php function lingfeng_custom_pagenavi( $custom_query,$range = 4 ) { global $pag ...

  10. TX1 flash backup & restore

    备份:耗时2.5小时 ./tegraflash.py --bl cboot.bin --applet nvtboot_recovery.bin --chip 0x21 --cmd "read ...