2013-05-30 17 views
1

我正在PHP中开发UI框架。这个想法与.NET平台非常相似。开发不同的php类来呈现DOJO控件。简而言之,框架生成Javascript代码来在客户端呈现DOJO UI控件。过程如下:在PHP中的UI框架中重叠请求中的状态管理

第一个请求:

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

后续请求:

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

上述过程对来自同一会话的单个请求是完美的。 我需要一次处理来自同一会话的多个请求。

问题:

让我们说,有来自同一个会话R1和R2分别 两个请求。 R1需要10秒完成,而R2需要3秒。虽然 R1在5秒R2来了,并更新状态文件时R1是在8 秒。之后R1在2秒后再次更新状态文件。

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

上述场景如何在PHP中处理?有什么设计模式可以在UI框架中进行状态管理?

回答

0

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

备注:在每个GET请求中,存储一些带有会话的序列化表单数据似乎过多。在大多数情况下,您的表单在所有用户中都是相同的。而在POST上,你大概会知道表单应该“看起来”是什么样子(尽管我想你是这样做来推广表单处理程序)。