Session

以下是为你整理的 Session 对象​ 结构化笔记,结合了文本原理与图示的底层映射逻辑:

一、 Session 核心概念与产生背景

  • 会话含义:Session(会话)类似于操作应用程序的过程(打开、更改、关闭),服务器借此“记住”用户。
  • 产生背景:HTTP 协议是无状态的(Web 服务器默认不知道用户是谁、做了什么)。
  • 解决原理:服务器为每个用户创建唯一的 Cookie(包含 SessionID)​ 传给客户端。客户端后续请求携带此 ID,服务器通过它识别用户并关联数据。
  • 作用:存储单一用户的信息(如 name、id、参数),对应用所有页面可用。服务器为每个新用户创建 Session,失效时撤销

二、 底层映射逻辑

图中展示了客户端与服务器端的对应关系:

  • 客户端:不同用户(如张三、李四)的浏览器持有不同的 cookie (sessionid)
    • 例:张三持有 sessionid=sd...,李四持有 sessionid=sdf...
  • 服务器端:维护一个 Session 存储区(红框部分),以 SessionID 为键,关联具体的键值对数据。
    • 例:服务器通过李四的 ID 找到对应数据;通过张三的 ID 找到 key1: value1 (张三)key2: value2
  • 结论:客户端 Cookie 仅存 ID,真实用户数据存储在服务器端的 Session 对象中,保障安全性。

三、 Session 生命周期

1. 何时开始

满足以下任一条件即开始:

  • 新用户请求 ASP 文件,且 Global.asa 引用了 Session_OnStart 子程序。
  • 某个值被存储在 Session 变量中。
  • 用户请求 ASP 文件,且 Global.asa 使用 <object> 标签通过 session 的 scope 实例化对象。

2. 何时结束

  • 超时结束:用户规定时间内无请求/刷新,默认 20 分钟
    • 设置超时(如 5 分钟):Session.Timeout=5
  • 主动销毁:使用 Abandon 方法立即结束:Session.Abandon

四、 基本操作(ASP 语法示例)

1. 存储与读取

  • 赋值(存储用户名和年龄): Session("username")="Donald Duck" Session("age")=50
  • 读取(任何页面均可使用): Welcome <%Response.Write(Session("username"))%>

2. 移除变量

  • Contents 集合:包含所有 session 变量。
  • 移除单个(如 age<18 移除 sale): If Session.Contents("age")<18 then Session.Contents.Remove("sale") End If
  • 移除所有(清空会话): Session.Contents.RemoveAll()

发表回复

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