文章
· 十月 17, 2022 阅读大约需 3 分钟

第十九章 CSP Session 管理 - %CSP.Session 对象

第十九章 CSP Session 管理 - %CSP.Session 对象

对象中的 %CSP.Session 包含有关当前Session的信息以及以编程方式控制会话各个方面的方法。

User Session DataData Property

可以使用其 Data 属性将 %CSP.Session 中的应用程序特定信息存储在对象中。数据是一种多维数组属性,可让关联多维数组中的特定信息。该数组的内容会在会话的整个生命周期内自动维护。

可以像使用任何其他 ObjectScript 多维数组一样在对象 Data 属性中使用 %CSP.Session

例如,如果在 OnPage 方法中执行以下代码:

 Set %session.Data("MyData") = 22

然后对同一会话的后续请求(无论哪个类处理请求)在对象中的 %CSP.Session中看到此值:

 Write $Get(%session.Data("MyData")) // this should print 22

注意:理解为全局变量。

%CSP.Session 中存储应用程序特定数据的能力是一项非常强大的功能,但应该正确使用。进一步讨论请参阅“状态管理”部分。

设置用户Session数据 - 设置命令

要在对象的 %CSP.Session 中存储数据(仅文字数据 — 不是对象引用),请使用 Set command Data 数组中的每个节点都可以包含最多 32K 个字符的字符串。

 Set %session.Data("MyData") = "hello"
 Set %session.Data("MyData",1) = 42

检索用户会话数据 - 写入命令

作为 ObjectScript 表达式的一部分,可以从 Data 属性中检索数据:

 Write %session.Data("MyData")
 Write %session.Data("MyData",1) * 5

如果引用 Data 数组中没有值的节点,则在运行时会出现 <UNDEFINED> (未定义)错误。为避免这种情况,请使用 ObjectScript $Get 函数:

 Write $Get(%session.Data(1,1,1)) // return a value or ""

删除用户会话数据——Kill 命令

要从 Data 属性中删除数据,请使用 ObjectScript Kill 命令:

 Kill %session.Data("MyData")

Session Timeout

CSP Session会自动跟踪自收到来自客户端的请求以来已经过去了多少时间。如果此经过的时间超过某个阈值,则会话自动超时。

默认情况下,会话超时设置为 900 秒(15 分钟)。可以在管理门户中更改 CSP 应用程序的此默认设置。导航到系统管理 > 安全 > 应用程序 > Web 应用程序。选择应用程序并单击编辑。还可以通过在对象 AppTimeout 属性中设置 %CSP.Session的值从应用程序中设置它:

 Set %session.AppTimeout = 3600 // set timeout to 1 hour

要禁用会话超时,请将超时值设置为 0

请注意,如果会话在其生命周期内更改 CSP 应用程序,则其超时值将不会根据会话移动到的应用程序中定义的默认超时值进行更新。例如,如果会话从 CSP 应用程序 A 开始,默认超时时间为 900 秒,然后移动到默认超时时间为 1800 秒的 CSP 应用程序 B,则会话在 900 秒后仍将超时。

如果希望应用程序更改导致会话超时更新为新应用程序的超时,请使用会话事件类,覆盖 OnApplicationChange 回调方法,并添加代码来处理 %session 对象的 AppTimeout 属性的更新。

超时通知 - OnTimeout 方法

当发生 CSP 应用程序超时时,CSP 服务器可以通过在调用指定 %CSP.SessionEventsOnTimeout 方法来通知应用程序。可以通过对象中的 %CSP.SessionEventClass 属性指定此类的名称。

默认情况下,没有定义事件类,超时只是结束当前会话。

讨论 (0)1
登录或注册以继续