第十八章 CSP Session 管理 - 与 CSP.Session 的Sessions
第十八章 CSP Session 管理 - 与 CSP.Session 的Sessions
`` 是一种无状态协议;每个请求都不知道以前的请求。虽然这适用于为用户提供简单静态内容的网站,但它使得开发交互式动态 Web 应用程序变得困难。为了解决这个问题,CSP 提供了所谓的Session 管理。
与 CSP.Session 的Sessions
Session 话表示在特定时间段内从特定客户端到特定应用程序的一系列请求。
CSP 自动提供会话跟踪;无需执行任何特殊操作即可启用它。 CSP 应用程序可以通过对象中的 %CSP.Session 查询和修改其会话的各个方面。 CSP 服务器通过 ObjectScript %session 变量使该对象可用。
Session 会话创建
当 HTTP 客户端向 CSP 应用程序发出第一个请求时,会话开始。
创建新session时,CSP 服务器会执行以下操作:
- 创建一个新的会话
ID号。 - 酌情执行许可检查。
- 在对象(持久)中创建
%CSP.Session的新实例。 - 调用当前
session事件类(如果存在)的OnStartSession方法。 - 创建一个
session-cookie以便在会话过程中跟踪来自HTTP客户端的后续请求。如果客户端浏览器禁用了cookie,CSP会自动使用URL重写(在每个URL中放置一个特殊值)来跟踪session。
对于session的第一个请求,对象中的 %CSP.Session的 NewSession 属性设置为 1。对于所有后续请求,它设置为 0:
If (%session.NewSession = 1) {
// this is a new session
}
Session ID
CSP 应用程序可以通过对象中的 %CSP.Session的 SessionId 属性找到其特定的会话 ID:
Write "Session ID is: ", %session.SessionId
Session Termination 和 Cleanup
Session因以下原因之一而结束。
Session超时,因为它在指定的Session时期限内没有收到任何请求。- 注销
CSP会话的推荐方法是链接到应用程序主页,并传递包含字符串CacheLogout=end的 URL。这会在运行主页之前结束当前会话——释放任何获得的许可证、删除现有会话数据并删除会话的安全上下文。 Session在服务器上以编程方式显式结束(通过将对象的EndSession属性中的%CSP.Session设置为 1。例如,如果客户端停止或导航到新站点,可能希望结束会话。- 可以对象的
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 | 如果使用 CacheUserName 和 CachePassword 传入,则它包含用户的当前密码。安全例程将用户密码更改为新值,即来自 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 来缩短此行为。 |