Установка формы ColdFusion и переменной сеанса - PullRequest
2 голосов
/ 01 февраля 2011

У меня есть флажок внутри тега формы, и я в основном хочу сохранить проверенное состояние флажка, используя сеанс.Видимо, я делаю это неправильно, потому что всякий раз, когда я перезагружаю страницу, она отключает сессию (которая является значением по умолчанию для параметра checkbox).Вот код, который я использую.

Форма:

<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 ]

4 голосов
/ 01 февраля 2011

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

Я думаю, это приведет к перезаписи сохраненного значения, если вы вернетесь на страницу откуда-то еще.Вместо этого попробуйте обновить значение сеанса только после отправки формы.Кроме того, поскольку вы используете cfform, вы можете сокращать вещи, используя yes/no вместо on/off.

Update Я забыл 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 голос
/ 01 февраля 2011

У вас на самом деле включены сеансы?

Вы должны явно включить сеансы для своего приложения, используя тег CFAPPLICATION , если вы используете Application.cfm или, если вы используете Application.cfc, установив this.sessionManagement = true .

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>

Хорошо, тогда если сеансы включены, когда вы отправляете форму, как выглядит код, на который вы отправляете форму?

...