2013-11-14 2 views
0

Я работаю в файле Login.cfm и используя followign подход для входасессия не работает в ColdFusion

<cfif IsDefined("FORM.inpUserName") AND ((LCASE(TRIM(inpUserName)) IS "myusername" AND inpPassword IS "mypassword"))> 
    <cfset session.username = FORM.inpUserName /> 
    <cfset SESSION.LoggedIn = 1>  
    <cflocation url="index.cfm" addtoken="no"> 

<cfelse> 
    <cfset SESSION.LoggedIn = 0> 
</cfif> 

<cfparam default="" name="inpUserName" /> 
<cfparam default="" name="inpPassword" /> 

Форма определяется следующим образом:

<cfform action="Login.cfm" method="post" and so on ... 

Внутри cfform, у меня есть определенные два cfinput-тега, захватывающие информацию от пользователя с атрибутом имени как name = "inpUserName" и value = "# inpUserName #"

и аналогичным образом для поля пароля.

Когда я нажимаю кнопку «Login», ничего не происходит, shoudln't это будет index.cfm, как я упомянул наверху в теге cflocation?

Просьбы уточнить

+1

Установите дамп и прервите верхнюю часть страницы входа и выведите значения, которые вы проверяете. –

+1

В 'application.cfc' или' application.cfm' вы включили сеансы? –

ответ

0

Попробуйте почистить его немного и разъяснение сферы вашего переменной формы равномерно по:

<cfparam name="form.inpUserName" default="" /> 
<cfparam name="form.inpPassword" default="" /> 

<cfif TRIM(form.inpUserName) IS "myusername" AND form.inpPassword IS "mypassword"> 
    <cflock type="exclusive" scope="session" timeout="10" > 
     <cfset session.username = form.inpUserName /> 
     <cfset session.LoggedIn = 1 /> 
    </cflock> 
    <cflocation url="index.cfm" addtoken="no" /> 

<cfelse> 
    <cflock type="exclusive" scope="session" timeout="10" > 
     <cfset session.LoggedIn = false /> 
    </cflock> 
</cfif> 

<cfinput type="text" name="inpUserName" value="#form.inpUserName#" /> 
<cfinput type="password" name="inpPassword" value="#form.inpPassword#" /> 

Вам не нужна функция isDefined, если вы устанавливаете cfparam ВАР.

Теперь вы должны перейти на страницу index.cfm, если вы введете «имя пользователя» в поле имени пользователя и «mypassword» в поле пароля в submit, если оно отправлено обратно к себе.

Для получения дополнительной информации о блокировке переменных сеанса:

Should I always need to use cflock with SESSION scope variables?

Configuring and using session variables

+1

«Суть в том, что нет никакой внутренней необходимости блокировать область сеанса (с CFMX 6.0), однако - как и с любым кодом - нужно не создавать условия гонки в своем коде, а разумное использование блокировки смягчает это». Поэтому почему 'cflock' не требуется. Это дополнительные накладные расходы без причины. –

+1

К сожалению, документы Adobe часто ужасны и не обновляются при выпуске новых версий. Я бы не стал полагаться на них для лучших практик. –

+0

@MattBusche Point принят. Тем не менее, я считаю, что большинство людей недостаточно осведомлены о состоянии гонки, чтобы избежать их или даже знать состояние гонки, когда они видят их.И, действительно, накладных расходов не так много. –

1

Давайте посмотрим на это условное:

<cfif IsDefined("FORM.inpUserName") 
AND ((LCASE(TRIM(inpUserName)) IS "myusername" 
AND inpPassword IS "mypassword"))> 

Это ищет 3 вещи, чтобы быть правдой.

  1. form.username должен быть определен
  2. переменная inpUserName, без белого пространства и в нижнем регистре должен быть «MyUserName»
  3. переменная inpPassword, без белого пространства и в нижнем регистре должен быть «mypassword»

Это означает, что только ваш условный условный код cfif может быть удовлетворен, если вы вводите значения «myusername» и «mypassword» при отправке формы. Это, вероятно, не то, что вы имели в виду, когда вы написали этот код.

+0

Благодарим за информацию. Я проверю свой код. – Jack

Смежные вопросы