Iis ColdFusion 8到ColdFusion 10迁移:cfLogin用户未按预期工作

Iis ColdFusion 8到ColdFusion 10迁移:cfLogin用户未按预期工作,iis,coldfusion,coldfusion-8,coldfusion-10,cflogin,Iis,Coldfusion,Coldfusion 8,Coldfusion 10,Cflogin,在从CF8升级到CF10、移动所有文件和数据库并跳过所有配置环之后,新版本的站点已启动并运行,但身份验证/登录不起作用 以下是环境: 旧服务器:ColdFusion Enterprise 8,0,1195765 操作系统:Windows Vista* 操作系统版本:6.0 更新级别:。。。。hf801-00007.jar IIS版本:7 (*不确定“Vista”来自何处?系统信息显示“不带Hyper-V的Windows Server 2008数据中心”) 新服务器:ColdFusion Ente

在从CF8升级到CF10、移动所有文件和数据库并跳过所有配置环之后,新版本的站点已启动并运行,但身份验证/登录不起作用

以下是环境:

旧服务器:ColdFusion Enterprise 8,0,1195765

操作系统:Windows Vista*

操作系统版本:6.0

更新级别:。。。。hf801-00007.jar

IIS版本:7

(*不确定“Vista”来自何处?系统信息显示“不带Hyper-V的Windows Server 2008数据中心”)

新服务器:ColdFusion Enterprise 10,0,11285437

Tomcat版本:7.0.23.0

操作系统:Windows Server 2008 R2

操作系统版本:6.1

更新级别:。。。。CHF100011.jar

Adobe驱动程序版本:4.1(内部版本0001)

IIS版本:7.5

我有一个非常标准的ColdFusion登录系统,在Application.cfc中使用。登录到旧站点后,输出
#GetAuthUser()#
将我的用户名打印到屏幕上,我所有基于角色的规则都有效

在新服务器上,输出GetAuthUser()打印为空

在旧站点上,
cfdump var=“#SESSION#”
包括:

cfauthorization_kllcms dXNlcm5hbWU6cGFzc3dvcmQ6YXBwX25hbWU= 
在新站点上,会话的
CFDUMP
根本不显示
cfauthorization\u kllcms
值。两个实例中都存在所有其他会话值

它与代码库、数据库结构等完全相同。当然,我的基于角色的规则都不起作用,因为它们都依赖于getAuthUser()和IsUserInRole(“x”)条件的验证

我知道初始登录过程本身正在工作,因为它使用用户信息正确地设置了会话变量,并且这些变量在后续请求中可用。但是传统的cflogin数据在随后的调用中都不可用

你知道什么会改变吗

更新:根据Adam的建议(如下),我设置了两个测试应用程序,一个在旧服务器上,一个在新服务器上

旧服务器:

新服务器:

使用“测试”和“demo982013”作为用户和密码

?logout=true
附加到URL以注销并重新测试。这两个应用程序有完全相同的代码,相同的数据库。我正在将会话和表单值以及
GetAuthUser()
value一起转储到屏幕上

身份验证方法与中所述的基本相同,如有必要,我可以在这里共享所有相关代码

请注意,在“新”服务器中,无论您是否登录,每次访问页面时都会加载表单。这是
cflogin
会话未被保留或识别的示例,因此每次访问都会显示登录表单(虽然不是在初始表单完成时,这表明cflogin至少在初始登录时工作)

更新2: 我一直在深入研究这一点,我能够让cfloginuser以几种方式启动,只是不作为标准的一部分

选项1:我创建了一个独立页面,并在其中放置了以下代码:

<cflogin><cfloginuser name="directtest" Password = "2519D6025B5191F754D01BE163972628" roles="1"></cflogin>
我知道查询成功,因为我正在设置一条警告消息,告诉我
loginquery.userroles
值不是空的,这是处理
cflogiuser
的条件

我知道代码在哪里失败了,只是不知道为什么。我尝试过对
cfloginuser
值进行硬编码,但仍然失败。我不知道下一步该怎么办。
cfloginuser
功能可以工作,只是不在我需要它工作的地方(在
loginQuery.userroles
条件中)

更新3:

为了向自己证明这不是我的代码,我又创建了两个测试站点,一个在旧服务器上,一个在新服务器上:

新服务器(CF10)=

旧服务器(CF8)=

我复制了一个数据库表,其中包含它们的模式和值。我添加了我的
cfdump
输出以显示正在创建的会话

使用“Bob”用户和“secret”密码进行测试。即使使用Adobe自己的代码,测试也会在CF10上失败

我不知道下一步该怎么办。重写应用程序以不使用
cfloginuser
不是一个选项,因为我们有十几个应用程序正在迁移到使用此身份验证模型的CF10,跨越数百个模板


IIS7.5处理ColdFusion请求的方式可能有点奇怪,但考虑到能够在查询结果条件之外成功实例化
cfLogiUser

ColdFusion 10基于应用程序的用户安全性被破坏

我已经部署了两个测试站点,使用了从Adobe网站复制的全部内容。一个测试点位于ColdFusion 8,一个位于ColdFusion 10。两个站点上的代码和数据库相同。我添加了
cfdump
输出,以在设置会话变量和登录状态时监视它们

测试站点ColdFusion 8:

测试站点ColdFusion 10:

使用“Bob”用户和“secret”密码登录表明CF10中的失败。最初显示登录成功,但请注意会话的
cfdump
在CF10中未显示
cfauthorization\u orders
值,而在CF8中,该值存在

在CF8中,登录后对同一URL的后续访问正确保留登录用户状态,并且不显示登录表单。在CF10中,实际上没有为用户创建会话,因此对同一URL的后续访问会提示再次登录

我已经对此进行了彻底的测试,包括绕过
cflogin
逻辑和强制
cfloginuser
,这成功地在CF10中创建了一个经过身份验证的用户demons
        <cfquery name="loginQuery" dataSource="mydatasource">
        SELECT id,username, userroles
        FROM myusertable
        WHERE
           username = '#cflogin.name#'
           AND userpass = '#HASH(cflogin.password)#'
        </cfquery>
        <cfif loginQuery.userroles NEQ "">
           <cfloginuser name="#cflogin.name#" Password="#cflogin.password#" roles="#loginQuery.userroles#">
           <cfset MyMessage = "#MyMessage#<br />The Login Query fired and returned expected - loginQuery.userroles NEQ ''">

        <cfelse>
           <CFSET MyMessage = "Your login information is not valid. <a href='index.cfm?logout=1'>If your session timed out, click here!</a>">   
           <cfinclude template="loginform.cfm">
           <cfabort>
        </cfif>
<cffunction name="onRequest">
<cfargument name = "targetPage" type="String" required=true/>
<cfinclude template=#Arguments.targetPage#>

<cfif IsDefined("loginQuery")>
  <cfif loginQuery.userroles NEQ "">
    <cflogin><cfloginuser name="#loginQuery.username#" Password = "#loginQuery.userpass#" roles="#loginQuery.userroles#"></cflogin>
  </cfif>
</cfif>

</cffunction>