变量会话从页面传递到页面coldFusion

时间:2017-09-24 18:30:52

标签: coldfusion

CFBuilder admin storage

15cdb5dcb6.jpg

Application.cfm

34ed7586e1.jpg Login.cfm

    <cfif not isDefined('FORM.submitButton')>
    <cfform name="loginForm" method="post" action="#CGI.SCRIPT_NAME#">
        Login: 
        <cfinput type="text" name="login" required="yes">
        Password: 
        <cfinput type="password" name="password" required="yes">
        <br>
        <cfinput type="submit" name='submitButton' value="Sign">
        <br>
        <cfinput type="button" name='registerButton' value="Register">
    </cfform>
<cfelse>
    <cfquery name='getUser' datasource="dbfortest">
        SELECT * FROM usertable WHERE login="#FORM.login#" ;
    </cfquery>
    <cfif getUser.RecordCount NEQ 0>

        <cfif FORM.password eq getUser.password>
            <cflock scope="Session" timeout="60" type="exclusive" >
            <cfset Session.loggedIn = "yes">
            <cfset Session.user = "#FORM.login#">
            </cflock>
        <cfoutput>#StructKeyList(Session)#</cfoutput>
        <cfelse>
            Your pass isn't correct.
        </cfif>
    <cfelse>
        There is no user with this name.
    </cfif>
</cfif>

当我想使用登录时的页面的一部分。

<cfif Session.loggedIn eq "no">
    <cfinclude template="login.cfm">
</cfif>
<cfif structKeyExists(session, "user")>
    <cfoutput>Welcome, #Session.user#.</cfoutput>
</cfif>
<cfoutput>#StructKeyList(Session)#</cfoutput> 

大家好,请帮我理解这些会议&#39;行为。 整个问题在于尝试将变量从一个页面传递到另一个页面。 所以登录后我没有在session结构中看到session.user。 我怎么能通过这个? 已经尝试过不同的浏览器。

2 个答案:

答案 0 :(得分:4)

@Aquitaine给了你一些很好的信息。我只想指出问题的另一部分可能是您为会话设置了10秒的生命周期。这可能不够长。

在您发布的Application.cfm示例中,您有以下行:

sessiontimeout="#createTimespan(0,0,0,10)#"

CreateTimeSpan函数的参数如下:

createTimespan(days, hours, minutes, seconds)

因此,您为会话分配了10秒的生命周期。也许你打算设置10分钟而不是10秒。

答案 1 :(得分:3)

  • 要弄清楚会话变量的用途,请在<cfdump var="#session#">语句后立即输入一些调试代码,以确保它们正在发生。也许cflock
  • 您不需要<cfdump var="#session#">您的会话范围(并且自CFMX以来不需要)。请参阅Adam when to lock scopes
  • 上的Adam Cameron的2013年帖子
  • 如果您的调试代码运行并且您看到了会话变量,但是它们已经在下一页上消失了,这可能是您的会话存储(这是cfadmin的不同部分)的问题,或者无论前面是什么 - 你正在使用的网络服务器。在onRequestStart的{​​{1}}中尝试Application.cfc,并确保每个请求的JSESSIONID都相同。 (或尝试在CFADMIN中禁用J2EE会话变量,并查看CFID / CFTOKEN是否仍存在相同的问题)。
  • 如果您的调试代码没有运行,那么您应该会看到一个错误条件。
  • 为了便于阅读,在引用示波器时,请确保在外壳中保持一致,例如: session不是Session。虽然这种事情在功能上可能无关紧要,但在引用路径或组件时可能会让您在移植性方面遇到麻烦。

其他一些问题:

  • 如果您要为loggedIn使用布尔值,请使用布尔值:truefalse10或(如果你必须yesno&#34;是&#34;这是一个字符串;如果你不得不做if (session.loggedIn)而没有人能够做if (session.loggedIn == 'yes'),那么就没有人能做cfqueryparam
  • 如果这是有效的,那么生产站点代码至少需要使用{{1}},因为您不希望将未转义的用户输入直接传递给数据库查询。
  • 您也可以在 cfml.slack.com 处查看CFML冗余,并在#cfml-beginners上询问有关编写登录表单的一些指示。