Создать переменную сеанса - PullRequest
0 голосов
/ 03 декабря 2018

Я очень новичок в 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 Ответ

0 голосов
/ 03 декабря 2018

Чтобы исправить указанную ошибку, вам нужно переместить настройку переменной сеанса над тегом <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>
...