现在试图弄清楚这一小时了,我受到了阻碍。简单的网站,允许员工注册。通常,雇主有一个公司范围的u / p供所有员工用来访问注册页面,但客户也想要一种方法来给员工一个自动登录链接进行注册。
足够简单 - 创建了一个页面“r.cfm”,它查找URL.emid(加密的雇主ID)和URL.h(基于解密的雇主ID的5个字符散列作为检查)。完整的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位置将它们发送到下一页。这就是它变得奇怪的地方。在下一页,我设置了一些测试代码,通过电子邮件向我发送会话转储。
如果直接在MS Word中点击,我会进入第二页(来自cfheader重定向 - employeeRegister.cfm的那一页)而我得到的不是一个 - 而是会话的两个电子邮件转储。第一个显示登录为true,但第二个显示为false,具有不同的jsessionid。
如果我使用完全相同的链接,将其粘贴到我的浏览器中,它会按预期工作 - 一个带有会话转储的电子邮件,显示session.logged为true。
employeeRegister.cfm上没有任何内容可以启动页面重新加载。它实际上甚至没有检查session.log in var直到下一页。 employeeRegister.cfm只是条款和条件以及转到下一页的提交按钮,这是读取和检查会话变量的地方。它实际上是带有文本的div,然后是带有接受/拒绝的表单标记。
答案 0 :(得分:6)
这是因为办公产品最初尝试充当浏览器(以测试网络创作),而不是立即将控制权交给浏览器。当浏览器控制URL时,有效会话不存在,因为办公室不会共享cookie。如果没有有效的会话cookie,您最终会在后续重定向或导航相关网站时退出。
这些MS KB文章可以帮助您解决问题。
http://support.microsoft.com/kb/899927&lt; - 主要是
http://support.microsoft.com/kb/218153&lt; - 有关Office链接的详细信息