Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP UI框架中重叠请求的状态管理_Php_Frameworks_State Management - Fatal编程技术网

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

PHP UI框架中重叠请求的状态管理,php,frameworks,state-management,Php,Frameworks,State Management,我正在用PHP开发一个UI框架。这个想法与.NET平台非常相似。开发了不同的php类来呈现DOJO控件。简言之,该框架生成Javascript代码以在客户端呈现DOJO UI控件。程序如下: 第一项请求: URL获取请求到服务器 服务器执行加载表单的相关脚本 调用每个子控件的render函数(这将生成 javascript代码) 序列化整个表单对象并将其保存到会话文件中 将JS代码输出到客户端 后续请求: 表单回发请求到达服务器 服务器从会话文件加载以前的状态(使用非序列化) 使用用户提交

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

第一项请求:

  • URL获取请求到服务器
  • 服务器执行加载表单的相关脚本
  • 调用每个子控件的render函数(这将生成 javascript代码)
  • 序列化整个表单对象并将其保存到会话文件中
  • 将JS代码输出到客户端
后续请求:

  • 表单回发请求到达服务器
  • 服务器从会话文件加载以前的状态(使用非序列化)
  • 使用用户提交的值更新状态对象
  • 调用事件处理程序
  • 在会话文件中保存当前状态
  • 向客户端提交响应
上述过程非常适合于来自同一会话的单个请求我需要一次处理来自同一会话的多个请求。

问题:

假设有两个来自同一会话R1和R2的请求 分别地R1需要10秒才能完成,R2需要3秒。虽然 R1为5秒,R2在R1为8秒时来更新状态文件 秒。之后,R1会在2秒后再次更新状态文件

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


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

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

旁注:在每次GET请求时,在会话中存储一些序列化的表单数据似乎太过分了。在大多数情况下,所有用户的表单都是相同的。在文章中,您可能知道表单应该是什么样子的(尽管我认为您这样做是为了泛化表单处理程序)