第十九章 CSP Session 管理 - %CSP.Session 对象
对象中的 %CSP.Session
包含有关当前Session
的信息以及以编程方式控制会话各个方面的方法。
User Session Data
— Data 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.SessionEvents
的 OnTimeout
方法来通知应用程序。可以通过对象中的 %CSP.Session
的 EventClass
属性指定此类的名称。
默认情况下,没有定义事件类,超时只是结束当前会话。