zoukankan      html  css  js  c++  java
  • 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.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()
    %>
    ...

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

    20150814001

    这些代码中演示了如何遍历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 中,如下图:

    20150814002

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

    20150814003


    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>

    运行后,效果如下:

    20150814004


    示例代码下载

    Session.rar

  • 相关阅读:
    Linux 文件 目录结构探索
    实践 : Ubuntu 上 Testlink 部署
    Linux 查找安装包所在目录的常用方法
    selenium + python 测试环境搭建 (WINDOWS)
    EntityFramework 学习 一 Entity Framework结构体系
    castle windsor学习-------Container Events 容器的事件
    castle windsor学习----ComponentModel construction contributors
    castle windsor学习----- CastleComponentAttribute 特性注册
    castle windsor学习-----Inline dependencies 依赖
    castle windsor学习-----Registering components by conventions
  • 原文地址:https://www.cnblogs.com/pchmonster/p/4731216.html
Copyright © 2011-2022 走看看