Session 一个保护coldfusion页面的简单应用程序-在会话中遇到问题
我正在测试如何在coldfusion中保护页面,在尝试创建用户可以注销的进程时遇到了一个问题 基本上,我有三页: 第A页-提交给的表单 B页 第B页-检查 form.username和form.password 在数据库上运行很好 页 C-注销页面,这是我所在的位置 有问题。 页面C抛出变量会话未定义错误 以下是C页上的代码: 以下是B页上的代码: 正如你所见,没有什么特别的: 现在,我认为Session变量可以被给定浏览器实例中的任何页面访问,但我显然错了 我需要做什么才能让C页我的注销页访问会话变量Session 一个保护coldfusion页面的简单应用程序-在会话中遇到问题,session,coldfusion,Session,Coldfusion,我正在测试如何在coldfusion中保护页面,在尝试创建用户可以注销的进程时遇到了一个问题 基本上,我有三页: 第A页-提交给的表单 B页 第B页-检查 form.username和form.password 在数据库上运行很好 页 C-注销页面,这是我所在的位置 有问题。 页面C抛出变量会话未定义错误 以下是C页上的代码: 以下是B页上的代码: 正如你所见,没有什么特别的: 现在,我认为Session变量可以被给定浏览器实例中的任何页面访问,但我显然错了 我需要做什么才能让C页我的注销页访问
非常感谢您的指导 Adobe docs建议不要在整个会话中使用structclear,更好的方法是将会话的子元素命名为session.data,然后使用structclear。如果您确实想让代码正常工作,请尝试保存密钥会话内部,然后像这样还原它们
<cflock timeout="15" throwontimeout="No" scope="SESSION" type="EXCLUSIVE">
<cftry>
<cfscript>
variables.HoldCFID = session.CFID;
variables.HoldCFT = session.CFToken;
variables.HoldSID = session.SessionID;
variables.HoldURLT = session.URLToken;
structClear(session);
session.CFID = HoldCFID;
session.CFToken = HoldCFT;
session.SessionID = HoldSID;
session.URLToken = HoldURLT;
</cfscript>
<cfcatch type="Any">
<!--- {If the session strut was cleared without saving the vars first} --->
<cfset rc = structClear(session)>
Session Cleared in Catch<br>
</cfcatch>
</cftry>
</cflock>
下面是一篇很好的文章,介绍了从Ray Camden的博客中清除会话的一些背景知识
CFQueryParam的示例也显示了SQL注入的经典攻击向量,请确保你的表单为你的。用户名和形式。谢谢。凯文。我将给这一方法一个SotoBeNordle刚刚在这里发表了另一个长的讨论。
<cfif NOT IsDefined ("form.username")>
<cflocation url="index.cfm" addtoken="No">
</cfif>
<cfquery name="test" datasource="cfdb">
SELECT * FROM USERS
WHERE USERNAME = '#FORM.username#'
AND PASSWORD = '#FORM.password#'
</cfquery>
<!---<CFSET Session.LoggedIn = "1">
<CFSET Session.FirstName = "#test.FirstName#">--->
<CFIF test.RecordCount IS 0>
<cflocation url="index.cfm" addtoken="No">
<CFSET StructClear(Session)>
<cfelse>
<CFSET Session.LoggedIn = "1">
<!---<cflocation url="test.cfm" addtoken="No">--->
</cfif>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<p><a href="logout.cfm">Log Out</a></p>
<p> </p>
<p> </p>
<p><br>
This content is protected.
</p>
</body>
</html>
<cflock timeout="15" throwontimeout="No" scope="SESSION" type="EXCLUSIVE">
<cftry>
<cfscript>
variables.HoldCFID = session.CFID;
variables.HoldCFT = session.CFToken;
variables.HoldSID = session.SessionID;
variables.HoldURLT = session.URLToken;
structClear(session);
session.CFID = HoldCFID;
session.CFToken = HoldCFT;
session.SessionID = HoldSID;
session.URLToken = HoldURLT;
</cfscript>
<cfcatch type="Any">
<!--- {If the session strut was cleared without saving the vars first} --->
<cfset rc = structClear(session)>
Session Cleared in Catch<br>
</cfcatch>
</cftry>
</cflock>