在MS Word中单击的链接丢失CF会话变量,但复制和粘贴工作正常

Ste*_*eve 3 coldfusion coldfusion-8

一直试图弄清楚这一小时,我受到了阻碍.简单的网站,允许员工注册.通常,雇主有一个公司范围的u/p供所有员工用来访问注册页面,但是客户还想要一种方法来为员工提供自动登录的链接以进行注册.

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

https://www.domain.com/r.cfm?emid=22EBCA&h=F5DEA
Run Code Online (Sandbox Code Playgroud)

r.cfm确保存在正确的URL变量,解密emid,比较检查值,如果一切正确,则设置一些会话变量:

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

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

如果直接在MS Word中单击,我会进入第二页(cfheader重定向 - employeeRegister.cfm中的那一页),我得到的不是一个 - 而是会话的两个电子邮件转储.第一个显示登录为true,但第二个显示为false,具有不同的jsessionid.

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

employeeRegister.cfm上没有任何内容可以启动页面重新加载.它实际上甚至没有检查session.log in var直到下一页.employeeRegister.cfm只是条款和条件以及转到下一页的提交按钮,这是读取和检查会话变量的地方.它实际上是带文本的div,然后是带有接受/拒绝的表单标签.

Tra*_*vis 6

这是因为办公产品最初尝试充当浏览器(以测试Web创作),而不是立即将控制权交给浏览器.当浏览器控制URL时,有效会话不存在,因为办公室不会共享cookie.如果没有有效的会话cookie,您最终会在后续重定向或导航相关网站时退出.

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

http://support.microsoft.com/kb/899927 < - 主要是

http://support.microsoft.com/kb/218153 < - 有关Office链接的详细信息