ColdFusion表单和会话变量设置

时间:2011-01-31 23:59:32

标签: coldfusion

我在表单标签中有一个复选框,我基本上想要使用会话保持复选框的选中状态。显然我做错了,因为每当我重新加载页面时,它都会将会话设置为关闭(这是复选框参数的默认值)。这是我正在使用的代码。

形式:

<cfform name="matureContent" method="post" action="/index.cfm?fuseaction=main.Channels_Detail&c=#URL.c#" enctype="multipart/form-data">
      <cfif SESSION.matureSession eq "on">
      <input name="myCheckbox" type="checkbox" checked="checked" />
      <cfelse>
      <input name="myCheckbox" type="checkbox"/>
      </cfif>
      <input type="submit" value="Save" />
      </cfform>

如果页面加载时不存在会话变量和参数。

    <cfparam name="form.myCheckbox" default="off">
<cfparam name="SESSION.maturesession" default="off">
<cfset SESSION.maturesession = form.myCheckbox>

如果我完全以错误的方式解决这个问题,请告诉我。感谢。

2 个答案:

答案 0 :(得分:4)

  

<cfparam name="form.myCheckbox" default="off">
<cfparam name="SESSION.maturesession" default="off">
<cfset SESSION.maturesession = form.myCheckbox>

我认为如果从其他地方返回页面,将导致覆盖已保存的值。相反,请尝试仅在提交表单时更新会话值。此外,由于您使用的是cfform,因此可以使用yes/no代替on/off来缩短内容。

更新我忘记了会话变量的cfparam。但是如果你真的想在整个会话期间进行它,你也可以初始化它onSessionStart

<cfparam name="SESSION.maturesession" default="no">
<cfif structKeyExists(FORM, "submit")>
    <cfparam name="form.myCheckbox" default="no">
    <cfset SESSION.maturesession = form.myCheckbox>
</cfif>

<cfform name="test" method="post" ....>
    <cfinput name="myCheckbox" type="checkbox" value="yes" checked="#session.matureSession#" />
    <input type="submit" name="submit" value="Save" />
</cfform>

答案 1 :(得分:1)

你真的开启了会话吗?

如果您正在使用Application.cfm,则必须使用CFAPPLICATION标记明确启用应用的会话,或者,如果您使用Application.cfc,则必须设置this.sessionManagement = true。< / p>

Application.cfm:

<cfapplication 
  name = "application name"
  applicationTimeout = #CreateTimeSpan(0,2,0,0)#
  sessionManagement = "yes"
  sessionTimeout = #CreateTimeSpan(0,0,20,0)#>

的Application.cfc:

<cfcomponent output="false">
  <!--- Application name, should be unique --->
  <cfset this.name = "ApplicationName">
  <!--- How long application vars persist --->
  <cfset this.applicationTimeout = createTimeSpan(0,2,0,0)>
  <!--- Should we even use sessions? --->
  <cfset this.sessionManagement = true>
  <!--- How long do session vars persist? --->
  <cfset this.sessionTimeout = createTimeSpan(0,0,20,0)>
</cfcomponent>

好的,如果打开会话,当您提交表单时,您将表单发布到的代码是什么样的?