2011-01-31 160 views
2

我有一個窗體標記內的複選框,我基本上想要使用會話持久化複選框的選中狀態。顯然我做錯了,因爲每當我重新加載頁面,它會將會話設置爲關閉(這是複選框參數的默認值)。這是我使用的代碼。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> 

Session變量,而params,如果它們不存在的頁面加載。

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

如果我以完全錯誤的方式告訴我,請告訴我。謝謝。

+0

您是否在代碼塊用於設置會話後使用``?如果是這樣,那就是問題所在。請參閱此技術說明:http://kb2.adobe.com/cps/181/tn_18171.html – orangepips 2011-02-01 02:14:48

回答

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

你確實打開了會話嗎?

如果您使用的是Application.cfm,或者如果您使用的是Application.cfc,則必須通過設置this.sessionManagement = true來明確地爲您的應用程序使用CFAPPLICATION標記打開會話。

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> 

OK,那麼如果會話被打開,當你提交表單,什麼是代碼看起來像你」重新張貼表單?

+0

會話已打開並正常工作,但每當我離開頁面並返回時,會話都將更改回默認參數。 – 2011-02-01 00:30:26