首页 > 其他分享 >第二十章 CSP Session 管理 - 状态管理

第二十章 CSP Session 管理 - 状态管理

时间:2022-10-19 07:48:55浏览次数:55  
标签:存储 Session 信息 第二十章 session cookie CSP

第二十章 CSP Session 管理 - 状态管理

状态管理

因为 HTTP 是无状态协议。为 Web 编写的应用程序必须使用特殊技术来管理应用程序上下文或状态。 CSP 提供了许多用于状态管理的机制。这些中的每一个都可能适用于特定情况。

请求之间的跟踪数据

Web 应用程序中状态管理的基本问题是跟踪连续 HTTP 请求之间的信息。有许多可用的技术,包括:

  • 使用隐藏的表单字段或 URL 参数在单个页面上存储数据
  • 将数据存储在客户端的 cookie
  • 将数据存储在服务器上的对象中的 %CSP.Session
  • Caché 数据库中存储数据

在页面中存储数据

要将状态信息存储在页面中,必须放置它以便来自该页面的后续请求包含该信息。

如果页面通过超链接发出请求,则数据应放置在超链接的 URL 中。例如,这是一个包含在 .csp 文件中定义的状态信息的超链接:

<a href="page2.csp?DATA=#(data)#">Page 2</A>

CSP 为包含此链接的页面提供服务时,表达式 #(data)# 将替换为发送给客户端的文本中的服务器变量 data 的值。当用户选择这个指向 page2.csp 的链接时,CSP 服务器可以通过 %request 对象访问 DATA 的值。如果需要,CSP 可以对此类数据进行编码。

如果页面包含表单,可以将状态信息放置在隐藏字段中:

<form>
<input type="HIDDEN" name="DATA" value="#(data)#">
<input type="SUBMIT">
</form>

与超链接示例一样,当将此表单发送到客户端时,表达式#(data)# 将替换为变量 data 的值。当用户提交此表单时,可以通过 %request 对象获得 DATA 的值。

要自动将值插入所有链接和表单,请使用 %response.Context

存储状态信息的另一种技术是将其放置在 cookie 中。 cookie 是存储在客户端中的名称-值对。来自客户端的每个后续请求都包含所有先前的 cookie 值。

要设置 cookie 值,请在象中盖 %CSP.Response 中的页面 cookie 值:

Class MyApp.Page Extends %CSP.Page
{
//...

ClassMethod OnPreHTTP() As %Boolean
{
    Do %response.SetCookie("UserName",name)
     Quit 1
}
}

服务器稍后可以使用象的 Cookies 属性中的 %CSP.Request 检索此信息。

cookie 中存储信息对于希望在会话结束后记住的信息很有用。 (为此,必须设置过期日期,默认情况下,cookie 在浏览器关闭时结束。)例如,可以记住 cookie 中的用户名,以便在后续会话中他们不必重新输入此信息。有关不同类型的 cookie 及其格式的信息,请参阅 HTML 手册。

Session中存储数据——数据属性

如前一节所述,可以使用其 Data 属性将会话 %CSP.Session 中的状态信息存储在对象中。放置在 %session 对象中的任何信息都可用于当前会话的剩余部分(或直到它从 %session 对象中删除)。

%session 对象是存储在session期间有用的简单信息的好地方,例如当前用户的姓名。 %session 对象不适用于必须超出当前session范围的信息。对于依赖于用户通过应用程序采用的导航路径的信息,它也不是一个好地方。用户通常可以随意随意跳转 Web 应用程序,如果应用程序对用户采用的特定路径做出假设,这可能会导致麻烦。

在数据库中存储数据

如果有更复杂的信息要与用户关联,最好将其存储在内置的 Caché 数据库中。一种方法是在数据库中定义一个或多个持久类,并将它们的对象 ID 值存储在 %session 对象中以供后续访问。

服务器上下文保留 - 保留属性

通常,CSP 服务器从一个请求到下一个请求保留的唯一处理上下文保存在 %session 对象中。 CSP 服务器提供了一种机制来保存整个处理上下文变量、实例化对象、数据库锁、请求之间的打开设备。这称为上下文保留模式。通过在对象 Preserve 属性中设置 %CSP.Session的值,可以随时在 CSP 应用程序中打开或关闭上下文保留。请注意,将进程绑定到一个会话会导致缺乏可伸缩性。

标签:存储,Session,信息,第二十章,session,cookie,CSP
From: https://www.cnblogs.com/yaoxin521123/p/16804867.html

相关文章

  • 登录(cookie,session)
    cookie和登录校验cookie:存储在浏览器的一段字符串,最大5kb,每个域都有一个cookie,跨域不共享,格式如k1=v1;k2=v2(可结构化)cookie会随http请求传递给服务端每次http请求,coo......
  • 补CSP2020
    T1儒略日丧心病狂.jpg就是我也调了一会。对于一道T1来说确实挺久的,而且我交了好几发才过((T2动物园我们仍未知道出题人为什么不把他放到T1智障题T3函数调用拓扑......
  • 2022.10.18 CSP2022 模拟赛五
    旅行路线Source:CF459E。憨憨题。按\(w\)排序后,考虑DP,设\(f_u\)表示目前在点\(u\),可以走出的最长路线。按阶段转移的时候稍微注意一下相同边权的处理,具体的,开一个......
  • django报错 'WSGIRequest' object has no attribute 'session'
    最新学python的django后台用到session,报错'WSGIRequest'objecthasnoattribute'session'开始以为是session问题,结果去掉session仍报类似'WSGIRequest'objecthasno......
  • 2022 CSP-S 游记
    \(2022-9-18\)初赛在考场门口听到有人在聊florr.io,florr怕不是风靡\(OI\)圈了。宇宙射线什么东西。\(2022-9-27\\Day\-\infty\)出分了,还好过了,同机房的报了提高组的......
  • mybatis_15_在 SqlSessionFactoryBuilder.build() 方法中传入属性值
    查阅SqlSessionFactoryBuilder.java中重载函数build的定义中,存在支持传入Properties的定义  使用参考:Stringresource="mybatis-config2.xml";InputStreaminputS......
  • javaweb实操之session'
    什么是session服务器会给一个用户(浏览器)创建一个session对象一个session独占一个浏览器,只要浏览没有关闭,这个session就存在用户登录之后,整个网站都可以访问->保存用......
  • CSP-S赛前训练合集
    刷题queue:1015B组T3Gym102331C从GlobalRound23可以看出我状态差成啥样了。还好停课了。一些我认为厉害的东西会加粗。模拟赛会专门开另一系列文章并加密码,密码是......
  • 2022.10.16———HZOI【CSP-S模拟19】游寄
    \(\text{Preface}\)排名\(\text{Rank27/44}\)得分\(\text{100pts+0pts+4pts+0pts=104pts}\)总结:\(\text{T1}\)场切题我写了个shab贪心搞了\(\text{2h}\)......
  • csp-s模拟19[木棍,环,传令,序列]
    csp-s模拟19[木棍,环,传令,序列]木棍就是个分讨,注意先\(3,4\)配就行here#include<bits/stdc++.h>#defineLLlonglong#defineReregisterint#defineLDdo......