ASP入门(十)-Session对象
在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.Remove、Contents.RemoveAll、Abandon),用来删除 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>
运行后,效果如下:

示例代码下载
ASP入门(十)-Session对象的更多相关文章
- 18第一章 ASP.Net内建对象
第一章 ASP.Net内建对象 第一章 ASP.Net内建对象 ASP.Net为保持用户的数据和信息,内建了许多对象,包括Application.Response.Requ ...
- ASP入门(十二)-Application对象
在一起协同工作以完成某项任务的一组ASP文件称为一个应用程序.Application 对象用于把这些文件捆绑在一起. Application 对象用于在整个应用程序生存期间保存信息. Applicat ...
- IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题
IT咨询顾问:一次吐血的项目救火 年后的一个合作公司上线了一个子业务系统,对接公司内部的单点系统.我收到该公司的技术咨询:项目启动后没有规律的突然无法登录了,重新启动后,登录一断时间后又无法重新登 ...
- 【转】asp.net中利用session对象传递、共享数据[session用法]
来自:http://blog.unvs.cn/archives/session-transfer-method.html 下面介绍Asp.net中利用session对象传递.共享数据用法: 1.传递值 ...
- ASP.NET 使用application和session对象写的简单聊天室程序
ASP.Net中有两个重要的对象,一个是application对象,一个是session对象. Application:记录应用程序参数的对象,该对象用于共享应用程序级信息. Session:记录浏览 ...
- ASP.NET Application,Session,Cookie和ViewState等对象用法和区别 (转)
在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewState和Cache等.下面分别介绍它们的用法和区别. 方法 信息量大小 作用域和保 ...
- asp.net中利用session对象传递、共享数据[session用法]
下面介绍Asp.net中利用session对象传递.共享数据用法: 1.传递值: 首先定义将一个文本值或单独一个值赋予session,如下: session[“name”]=textbox1.text ...
- ASP入门(二十二)-连接数据库
ADO 简介 在 ASP 中访问数据库使用的 ADO 组件. ADO 是一项微软的技术. ADO 指 ActiveX 数据对象(ActiveX Data Objects). ADO 是微软的 Acti ...
- ASP入门(十五)- Global.asa
Global.asa 文件是一个可选文件,它可包含被 ASP 应用程序中每个页面访问的对象.变量和方法的声明.所有合法的浏览器脚本都可以在 Global.asa 中使用. Global.asa 文件只 ...
随机推荐
- 【图像处理】基于OpenCV底层实现的直方图匹配
image processing 系列: [图像处理]图片旋转 [图像处理]高斯滤波.中值滤波.均值滤波 直方图匹配算法.又称直方图规定化.简单说.就是依据某函数.或者另外一张图片的引导,使得原图改变 ...
- STM32 CRC-32 Calculator Unit
AN4187 - Using the CRC peripheral in the STM32 family At start up, the algorithm sets CRC to the Ini ...
- ThinkPHP 模型方法 getField() 和 select() 使用技巧
getField() 使用技巧 getField() 方法是 ThinkPHP 中用来获取字段值的方法,区别于 select() 和 find() 方法,通常仅用于获取个别字段的值.但是事实上并没有那 ...
- TCP握手与socket通信细节
http://www.jianshu.com/u/5qrPPM http://www.jianshu.com/p/f86512230707
- linux 内核升级2 转
linux内核升级 一.Linux内核概览 Linux是一个一体化内核(monolithic kernel)系统. 设备驱动程序可以完全访问硬件. Linux内的设备驱动程序可以方便地以模块化(mod ...
- CentOS内核定制
版本号:1.0.1 作者:石硕 更新:2014-05-09 15:04:53 ============================================================ ...
- [Winform]关闭窗口使其最小化
摘要 在用户操作关闭窗口的时候,而不是真正的关闭,使其最小化到任务栏,或者托盘. 核心代码 关闭操作,使其最小化到任务栏. private void Form1_Load(object sender, ...
- In-Place upgrade to Team Foundation Server (TFS) 2015 from TFS 2013Team Foundation Server TFS TFS 2015 TFS upgrade TFS with Sharepoint
This upgrade document gives detailed step by step procedure for the In-Place upgrade from TFS 2013 t ...
- Delphi开发环境中应用层网络协议的实现
已经进入Internet网络时代了,许多新出的软件都拥有网络功能.其实,在这些软件背后所依靠的技术基础就是一系列的Inernet网络协议标准,亦即TCP/IP系列协议. 下面本人简要介绍一下在Delp ...
- Idea2018激活破解
原文:https://www.imsxm.com/2018/07/idea-2018-1-5-crack-patcher.html 最近更新了Intellij IDEA到2018.1.5之后,使用之前 ...