Создать переменную сеанса
Я очень новичок в ColdFusion (начался вчера). Я пытаюсь создать переменную сеанса в checklogin.cfm
, что равняется вводу имени пользователя из формы. Таким образом, я могу отобразить имя пользователя на странице результатов. Возможно ли это сделать? Или есть ли лучший способ сделать это?
application.cfm
<cfset this.name = "Name of your application">
<cfset this.sessionManagement = true>
check_login.cfm
<!--- If username equals user1 and password equals password1, take user to home page. --->
<cfif form.userName eq "user1" AND form.password eq "password1">
<cfset session.userName = form.userName/>
<cflocation url="home.cfm" ADDTOKEN="Yes">
<!--- If username doesn't equal user1 and/or password doesn't
equal password1, take user back to login page. --->
<cfelse>
<cflocation url="login.cfm" ADDTOKEN="Yes">
</cfif>
home.cfm
<cfoutput>
<br>
<b><font size="6">Enter the numbers you want to add:</font></b>
</cfoutput>
<!--- Add numbers form --->
<cfform action="result.cfm" method="post">
<!--- Get numbers from user --->
<p>
Enter first number:
<cfinput type="Text" name="number1" required="Yes" size="20"
maxlength="100" message="You must enter a number.">
<br>
Enter second number:
<cfinput type="Text" name="number2" required="Yes" size="20"
maxlength="100" message="You must enter a second number.">
<br>
</p>
<!--- submit button --->
<cfinput type="Submit" name="submitForm" value="Submit">
</cfform>
login.cfm
<cfform action="check_login.cfm" method="post">
<!--- Get login info from user --->
<p>
UserName:
<cfinput type="Text" name="userName" required="Yes" size="20" maxlength="25"
message="Username is required and must be less than 25 characters.">
<br>
Password:
<cfinput type="password" name="password" required="Yes" size="20" maxlength="20"
message="Password is required and must be less than 20 characters.">
<br>
</p>
<!--- submit button --->
<cfinput type="Submit" name="submitForm" value="Submit">
</cfform>
result.cfm
<cfset result = form.number1 + form.number2 >
<cfoutput>
<b><font size="6">Hi #session.userName#! </font></b><br>
<br>
<!-- Display result to user. -->
<font size="5">Your result is: #result#</font>
</cfoutput>
Проблема с страницей результатов, где написано Element USERNAME is undefined in SESSION
указывая на линию <b><font size="6">Hi #session.userName#! </font></b>
1 ответ
Чтобы исправить упомянутую ошибку, вам нужно переместить настройку переменной сеанса выше <cflocation>
тег в вашем файле check_login.cfm.
Из этого:
<!--- If username equals user1 and password equals password1, take user to home page. --->
<cfif form.userName eq "user1" AND form.password eq "password1">
<cflocation url="home.cfm">
<!--- If username doesn't equal user1 and/or password doesn't equal password1, take user back to login page. --->
<cfelse>
<cflocation url="login.cfm">
</cfif>
<cfset session.userName = form.userName/>
Чтобы что-то вроде этого:
<!--- If username equals user1 and password equals password1, take user to home page. --->
<cfif form.userName eq "user1" AND form.password eq "password1">
<cfset session.userName = form.userName/>
<cflocation url="home.cfm">
<!--- If username doesn't equal user1 and/or password doesn't equal password1, take user back to login page. --->
<cfelse>
<cflocation url="login.cfm">
</cfif>
Причина этого в том, что ColdFusion остановит обработку остальной части вашего файла, когда он обнаружит <cflocation>
тег. Когда он обрабатывает этот тег, он немедленно отправит перенаправление пользователю. Таким образом, ваш код для установки переменной сеанса никогда не выполнялся.
Обновленный пример использования CFLOCK для установки переменной сеанса
<!--- If username equals user1 and password equals password1, take user to home page. --->
<cfif form.userName eq "user1" AND form.password eq "password1">
<cflock scope="session" type="exclusive" timeout="10">
<cfset session.userName = form.userName/>
</cflock>
<cflocation url="home.cfm">
<!--- If username doesn't equal user1 and/or password doesn't equal password1, take user back to login page. --->
<cfelse>
<cflocation url="login.cfm">
</cfif>