运行 ColdFusion 7。
session
Application.cfm 将所有变量循环到request.session
OnRequestEnd.cfm 将所有request.session
值循环回session
它这样做是为了在单个事务中写入变量时只需要锁定一次范围。(我相信这不再是一个问题了?但我不能完全撕掉它)。
我有一个“redirect.cfm”页面,它提供 301 重定向到 SEO URL 或提供内容。某些表单发布到旧 URL,因此需要 301 重定向,这会导致 POST 数据丢失。这就是我打算如何处理它。
<!--- if form scope exists (posted data) copy it to the request.session scope --->
<cfif structKeyExists(form,'fieldNames')>
<cfset request.session.postData = structCopy(form)>
</cfif>
然后它继续进行 301 重定向,当它返回到 redirect.cfm 以传递内容时,它运行此代码
<!--- if request.session.postData exists (posted data) copy it to the form scope --->
<cfif structKeyExists(request.session,'postData')>
<cfset form = structCopy(request.session.postData)>
<cfset StructDelete(request.session,'postData')>
</cfif>
如果数据发布不需要 301 重定向,这可以正常工作。
通过 301 重定向,我确认 Application.cfm、OnRequestEnd.cfm 都运行了两次(一次用于初始 301,一次用于内容交付)。
在第一次 OnRequestEnd.cfm 调用结束时,session.postdata
表单数据已正确填充。
在 301 重定向之后,它再次点击 Application.cfm,session.postdata
返回“struct [empty]”
有什么帮助吗?谢谢