文章
· 十月 16, 2022 阅读大约需 4 分钟

第十八章 CSP Session 管理 - 与 CSP.Session 的Sessions

第十八章 CSP Session 管理 - 与 CSP.Session 的Sessions

`` 是一种无状态协议;每个请求都不知道以前的请求。虽然这适用于为用户提供简单静态内容的网站,但它使得开发交互式动态 Web 应用程序变得困难。为了解决这个问题,CSP 提供了所谓的Session 管理。

CSP.SessionSessions

Session 话表示在特定时间段内从特定客户端到特定应用程序的一系列请求。

CSP 自动提供会话跟踪;无需执行任何特殊操作即可启用它。 CSP 应用程序可以通过对象中的 %CSP.Session 查询和修改其会话的各个方面。 CSP 服务器通过 ObjectScript %session 变量使该对象可用。

Session 会话创建

HTTP 客户端向 CSP 应用程序发出第一个请求时,会话开始。

创建新session时,CSP 服务器会执行以下操作:

  1. 创建一个新的会话 ID 号。
  2. 酌情执行许可检查。
  3. 在对象(持久)中创建 %CSP.Session的新实例。
  4. 调用当前session事件类(如果存在)的 OnStartSession 方法。
  5. 创建一个 session-cookie 以便在会话过程中跟踪来自 HTTP 客户端的后续请求。如果客户端浏览器禁用了 cookieCSP 会自动使用 URL 重写(在每个 URL 中放置一个特殊值)来跟踪session

对于session的第一个请求,对象中的 %CSP.SessionNewSession 属性设置为 1。对于所有后续请求,它设置为 0

 If (%session.NewSession = 1) {
    // this is a new session
 }

Session ID

CSP 应用程序可以通过对象中的 %CSP.SessionSessionId 属性找到其特定的会话 ID

 Write "Session ID is: ", %session.SessionId

Session TerminationCleanup

Session因以下原因之一而结束。

  1. Session超时,因为它在指定的Session时期限内没有收到任何请求。
  2. 注销 CSP 会话的推荐方法是链接到应用程序主页,并传递包含字符串CacheLogout=end 的 URL。这会在运行主页之前结束当前会话——释放任何获得的许可证、删除现有会话数据并删除会话的安全上下文。
  3. Session在服务器上以编程方式显式结束(通过将对象的 EndSession 属性中的 %CSP.Session 设置为 1。例如,如果客户端停止或导航到新站点,可能希望结束会话。
  4. 可以对象的 Logout 方法中使用 %CSP.Session注销会话

Session结束时,CSP 服务器会删除对象中的持久性 %CSP.Session并减少会话许可证计数(如果适用)。如果会话由于超时或服务器操作而结束,它还会调用会话事件类的 OnEndSession 方法(如果存在)。

某些 Zen 组件,尤其是 tablePane,将临时数据存储在 ^CacheTemp.zenData 中,这通常由默认事件类自动清理。但是,如果定义自己的自定义事件类,则必须在事件类的 OnEndSession() 回调方法中显式调用 %ZEN.Controller.OnEndSession()。否则临时数据不会被清理。

保留的 CSP 参数

该表显示了保留参数及其用途。

Parameter Use
CacheUserName 从登录页面,包含登录的用户名;例如, CacheUserName="fred"
CachePassword 从登录页面,包含 CacheUserName 指定的用户的密码;例如, CachePassword="fredspwd".
CacheOldPassword 如果使用 CacheUserNameCachePassword 传入,则它包含用户的当前密码。安全例程将用户密码更改为新值,即来自 CachePassword 的值,例如 CacheOldPassword="fredsAboutToBeChangedPwd"。更改密码后,用户使用新密码登录。
CacheRepeatPassword 未使用。
CacheLogin 未使用。
CacheLogout 没有值或除“cookie”之外的任何值的 CacheLogout 会导致此请求的会话被注销(但不会被破坏)。注销会破坏当前的登录 Cookie 并删除为该session保留的任何两因素安全令牌. CacheLogout="cookie" 销毁当前登录 Cookie
CacheSecurityToken CacheSecurityToken 包含从登录安全令牌页面提交的安全令牌的值,例如 CacheSecurityToken="12345678"
CacheSecuritySubmit 此名称的存在表明用户正在提交一个安全令牌,其值与 CacheSecurityToken 相关联.
CacheSecurityCancel 此名称的存在表示用户已取消登录安全令牌页面。
CacheLoginPage 登录页面,包括自定义登录页面,包含两个子页面:一个用于登录,一个用于返回安全令牌值。该页面检查 CacheLoginPage 的值以确定要显示的子页面。 CacheLoginPage=1 表示应该显示登录子页面。
CacheNoRedirect 请求了一个页面 P,但它未经身份验证,因此显示登录页面。用户从登录页面提交信息后,通常对 P的页面请求被重定向回浏览器。 (这会阻止浏览器在显示 P 之前要求用户按下<Resend> 按钮。)可以通过传递 CacheNoRedirect=1 来缩短此行为。
讨论 (0)1
登录或注册以继续