Coldfusion 在MS Word中单击的链接将丢失CF会话变量,但已复制&;粘贴的作品很好

Coldfusion 在MS Word中单击的链接将丢失CF会话变量,但已复制&;粘贴的作品很好,coldfusion,coldfusion-8,Coldfusion,Coldfusion 8,一个小时来我一直在想这个问题,但我被难住了。允许员工注册的简单网站。通常,雇主有一个公司范围的u/p供所有员工使用,以访问注册页面,但客户还希望有一种方式为员工提供一个自动登录注册的链接 足够简单-创建了一个页面“r.cfm”,用于查找URL.emid(加密的雇主ID)和URL.h(5个字符的哈希作为基于解密的雇主ID的检查)。完整URL可能如下所示: https://www.domain.com/r.cfm?emid=22EBCA&h=F5DEA r、 cfm确保存在正确的URL变量

一个小时来我一直在想这个问题,但我被难住了。允许员工注册的简单网站。通常,雇主有一个公司范围的u/p供所有员工使用,以访问注册页面,但客户还希望有一种方式为员工提供一个自动登录注册的链接

足够简单-创建了一个页面“r.cfm”,用于查找URL.emid(加密的雇主ID)和URL.h(5个字符的哈希作为基于解密的雇主ID的检查)。完整URL可能如下所示:

https://www.domain.com/r.cfm?emid=22EBCA&h=F5DEA
r、 cfm确保存在正确的URL变量,解密emid,比较检查值,如果全部正确,则设置一些会话变量如下:

<cflock scope="session" type="exclusive" timeout="10">
 <cfset SESSION.LOGGEDIN = TRUE/>
 <cfset SESSION.LOGIN.EMPLOYEE.COID = DecryptString(url.emid)/>
</cflock>

我想使用CFHEADER 302和CFHEADER location将它们发送到下一页。这就是奇怪的地方。在下一页,我设置了一些测试代码,通过电子邮件向我发送会话转储

如果在MS Word中直接单击,我将进入第二页(来自cfheader重定向-employeeRegister.cfm的页面),并且我将获得会话的两个电子邮件转储,而不是一个。第一个显示logged-in为true,但第二个显示为false,并使用不同的jsessionid

如果我使用完全相同的链接,将其粘贴到我的浏览器中,它将按预期工作-一封带有会话转储的电子邮件显示该会话。登录为true


employeeRegister.cfm上没有启动页面重新加载的内容。实际上,直到下一页,它才检查session.logged-in变量。employeeRegister.cfm只是一个条款和条件以及一个进入下一页的提交按钮,在下一页可以读取和检查会话变量。它实际上是一个带有文本的div,然后是一个带有接受/拒绝的表单标记。

这是因为office产品最初尝试充当浏览器(用于测试web创作),而不是立即将控制权交给浏览器。当浏览器控制url时,有效的会话不存在,因为office不会共享cookie。如果没有有效的会话cookie,您最终会在后续重定向或导航相关站点时注销

这些MS KB文章应该可以帮助您解决这个问题


谢谢!我添加了一些代码来检查重定向,如果重定向来自r.cfm,并且会话信息不正确,它将返回到r.cfm进行再次处理,这就解决了问题。