0

我正在使用 Login.cfm 文件并使用以下方法登录

<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#"

密码字段也是如此。

当我单击登录按钮时,什么都没有发生,它不应该像我在 cflocation 标记顶部提到的那样进入 index.cfm 吗?

请说清楚

4

2 回答 2

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”的值。这可能不是您编写该代码时的想法。

于 2013-11-14T02:23:59.807 回答
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如果您正在设置cfparamvars,则不需要该功能。

index.cfm如果您在提交时在用户名字段中输入“myusername”并在密码字段中输入“mypassword”,它现在应该会转到该页面,前提是它会发回给自己。

有关锁定会话变量的更多信息:

我是否总是需要将 cflock 与 SESSION 范围变量一起使用?

配置和使用会话变量

于 2013-11-14T01:52:23.307 回答