gpt4 book ai didi

coldfusion - 301 重定向后 Application.cfm 缺少 session 变量

转载 作者:行者123 更新时间:2023-12-03 09:32:54 25 4
gpt4 key购买 nike

运行 ColdFusion 7。

Application.cfm 将所有 session 变量循环到 request.session

OnRequestEnd.cfm 将所有 request.session 值循环回 session

这样做是为了在单个事务中写入变量时只需要锁定范围一次。 (我相信这不再是个问题了?但我不能完全撕掉它)。

我有一个“redirect.cfm”页面,它提供到 SEO URL 的 301 重定向或传送内容。某些表单发布到旧 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]”

有什么帮助吗?谢谢

最佳答案

structCopy()创建结构的浅拷贝,这意味着嵌套结构仅通过引用,这就是为什么您的简单值持续存在但嵌套结构没有存在的原因。一旦您的表单结构不再包含数据,您的 postData 结构就开始引用一个空结构,因此您的引用也是空的。

要对您的结构进行“深度复制”,请使用 duplicate()

另见 other structure functions

CF 9 documentation for deleting structures

关于coldfusion - 301 重定向后 Application.cfm 缺少 session 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13687135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com