首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >会话烹饪和Application.cfm

会话烹饪和Application.cfm
EN

Stack Overflow用户
提问于 2013-05-03 13:07:38
回答 2查看 2.6K关注 0票数 2

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

代码语言:javascript
复制
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中的当前代码:

代码语言:javascript
复制
<!--- 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>

编辑:这个文件中还有更多的代码--但它似乎无关紧要。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-03 13:18:24

如果正确地调整变量的范围会发生什么?cfid可以在变量范围中定义为null值。

代码语言:javascript
复制
<cfif structKeyExists(session,"cfid")>
    <cfcookie name="cfid" value="#session.cfid#" expires="NOW">
    <cfcookie name="cftoken" value="#session.cftoken#" expires="NOW">
</cfif>
票数 1
EN

Stack Overflow用户

发布于 2013-05-07 19:54:54

因为您是在一台新服务器上,所以我怀疑您成功地使cookie进入了一个没有有意义的值的状态。

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

代码语言:javascript
复制
<cfif IsDefined("cfid")>
    <cfcookie name="cfid" value="" expires="NOW">
    <cfcookie name="cftoken" value="" expires="NOW">
</cfif>

它仍然只对cfid进行测试,但没有设置cookie的值。值并不重要,因为代码将终止cookie。

我之所以说代码是荒谬的,是因为Cookie作用域是范围评价顺序的一部分。因此,整个代码所做的是:“如果cookies存在,请删除它们,然后用新值设置新cookie。”因此,用户将在每次刷新页面时获得一个新的会话。这与最初没有任何会话管理是一样的。因此,您最好设置sessionmanagement="false"并删除这两个cookie代码块。

这段代码之所以出现,可能是因为有人不允许通过URL/表单变量更改会话,从而限制了会话劫持,从而提供了一些额外的安全性。然而,它的实现方式也不能解决这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16359659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档