2

Application.cfm 中的这段代码(我知道它可能应该是 .cfc,但这是一些可以追溯到 MX 的旧代码),用于 CF8 和 CF9 上的 cookie,但我使用 CF10 将它移动到本地目录开发人员版,直到我注释掉那个块它才起作用。这是到达索引时的错误。

The system has attempted to use an undefined value, which usually indicates a programming error, either in your code or some system code.

Null Pointers are another name for undefined values.

The error occurred in C:/ColdFusion10/cfusion/wwwroot/TFT/Application.cfm: line 3
1 : <!--- APPLICATION settings --->
2 : <cfif IsDefined("cfid")>
3 :     <cfcookie name="cfid" value="#cfid#" expires="NOW">
4 :     <cfcookie name="cftoken" value="#cftoken#" expires="NOW">
5 : </cfif>

这是 Application.cfm 中的当前代码:

<!--- APPLICATION settings --->
<!--- 5/1/13 removed cookies temporarily
<cfif IsDefined("cfid")>
    <cfcookie name="cfid" value="#cfid#" expires="NOW">
    <cfcookie name="cftoken" value="#cftoken#" expires="NOW">
</cfif>--->

<!--- Define the application parameters--->
<cfapplication name="TFTAdmin" clientmanagement="Yes" 
    sessionmanagement="Yes" 
    setclientcookies="No" 
    sessiontimeout="#CreateTimeSpan('0','4','0','0')#" 
    applicationtimeout="#CreateTimeSpan('0','4','0','0')#">

<!--- Create cookies that disappear when the browser closes as to increase security --->
<cflock scope="session" type="readonly" timeout="5">
     <cfcookie name="cfid" value="#session.cfid#">
     <cfcookie name="cftoken" value="#session.cftoken#">
</cflock>

编辑:此文件中有更多代码 - 但似乎无关紧要。

4

2 回答 2

1

如果您正确地确定变量的范围会发生什么?cfid 可以在变量范围内定义为一个null值。

<cfif structKeyExists(session,"cfid")>
    <cfcookie name="cfid" value="#session.cfid#" expires="NOW">
    <cfcookie name="cftoken" value="#session.cftoken#" expires="NOW">
</cfif>
于 2013-05-03T13:18:24.920 回答
0

因为您在新服务器上,所以我怀疑您设法使您的 cookie 进入没有有意义的值的状态。

无论如何,我不确定修复代码是否重要,因为它似乎在做一些荒谬的事情。但是代码的快速修复将是这样做:

<cfif IsDefined("cfid")>
    <cfcookie name="cfid" value="" expires="NOW">
    <cfcookie name="cftoken" value="" expires="NOW">
</cfif>

它仍然只是测试,cfid但它没有设置 cookie 的值。这些值无关紧要,因为代码正在使 cookie 过期。

我之所以说代码是无意义的,是因为Cookie范围是范围评估顺序的一部分。因此,整个代码所做的就是说“如果 cookie 存在,则删除它们,然后设置具有新值的新 cookie”。因此,用户将在每次页面刷新时获得新的会话。这与首先​​没有任何会话管理相同。因此,您不妨设置sessionmanagement="false"和删除两个 cookie 代码块。

尽管不太可能,此代码的出现是因为有人希望通过不允许通过 URL/表单变量更改会话来提供一点额外的安全性,从而限制会话劫持。然而,它的实施方式也不能解决这个问题。

于 2013-05-07T19:54:54.053 回答