一个小时以来一直试图弄清楚这一点,但我被困住了。允许员工注册的简单网站。通常,雇主有一个公司范围内的 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 位置将它们发送到下一页。这就是它变得奇怪的地方。在下一页上,我设置了一些测试代码以通过电子邮件向我发送会话转储。
如果直接在 MS Word 中单击,我会进入第二页(来自 cfheader 重定向的页面 - employeeRegister.cfm),我得到的不是一个页面,而是两个会话的电子邮件转储。第一个显示登录为真,但第二个显示为假,并带有不同的 jsessionid。
如果我采用完全相同的链接,将其粘贴到我的浏览器中,它会按预期工作 - 一封带有会话转储的电子邮件,显示 session.logged in true。
employeeRegister.cfm 上没有任何内容会启动页面重新加载。它实际上甚至不检查 session.logged in var 直到下一页。employeeRegister.cfm 只是条款和条件以及一个提交按钮以转到下一页,这是读取和检查会话变量的地方。它实际上是一个带有文本的 div,然后是一个带有接受/拒绝的表单标签。