第十八章 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 来缩短此行为。 |