PHP UI框架中重叠请求的状态管理


State management in overlapping requests in a UI Framework in PHP

我正在开发一个PHP UI框架。这个想法与。net平台非常相似。开发了不同的php类来呈现DOJO控件。简而言之,框架生成Javascript代码以在客户端呈现DOJO UI控件。步骤如下:

第一个请求:

  • URL GET请求到达服务器
  • 服务器执行加载FORM的相关脚本。
  • 调用每个子控件的渲染函数(这将生成javascript代码)
  • 序列化整个FORM对象并将其保存到SESSION文件中。输出JS代码到客户端

后续请求:

  • 表单回发请求到达服务器
  • 服务器从SESSION文件中加载之前的状态(使用反序列化)
  • 用用户提交的值更新状态对象
  • 调用事件处理程序。
  • 将当前状态保存在SESSION文件中
  • 向客户端呈现响应。

对于来自同一会话的单个请求,上述过程工作完美。我需要同时处理来自同一会话的多个请求。

问题:

假设有两个请求来自同一个会话R1和R2分别。R1需要10秒完成,而R2需要3秒。而R1在5秒,R2来了,当R1在8秒时更新状态文件2秒后,R1再次更新状态文件。

问题是请求R2对状态文件所做的更改丢失了

如何在PHP中处理上述场景?是否有任何设计模式,我可以遵循在UI框架的状态管理?

每次请求表单时生成一个惟一键(GET),并将其作为隐藏的输入字段放入表单中。这是减轻CSRF攻击的常见做法,因此您还可以使用它来查看哪个表单post与每个GET请求相关。也许它将是你的表单数组存储在你的会话的关键。

旁注:在每个GET请求的会话中存储一些序列化的表单数据似乎过多了。在大多数情况下,所有用户的表单都是相同的。在POST上,您大概知道表单应该"看起来"像什么(尽管我认为您这样做是为了概括表单处理程序)。