Coldfusion 会话变量、欢迎消息

Coldfusion 会话变量、欢迎消息,coldfusion,Coldfusion,为什么这不起作用?我的欢迎信息,只是没有显示出来: <p>Welcome <cfoutput>#Recordset1.UserID#</cfoutput>.</p> 我创建的登录页面上的会话变量是: <cflock timeout=999 scope="Session" type="Exclusive"> <cfset Session.IDUsers =''> </cflock> 这是不对的吗?在我试

为什么这不起作用?我的欢迎信息,只是没有显示出来:

<p>Welcome <cfoutput>#Recordset1.UserID#</cfoutput>.</p>
我创建的登录页面上的会话变量是:

<cflock timeout=999 scope="Session" type="Exclusive">
    <cfset Session.IDUsers =''>
</cflock>
这是不对的吗?在我试图显示欢迎信息的索引页上,我有:

<cfquery name="Recordset1" datasource="cfGossip">
  SELECT *
  FROM   users
  WHERE  users.IDUsers = <cfqueryparam value="#Session.IDUsers#">
</cfquery>

我不确定这是否有效,或者是否有必要?

如果您将会话中存储的userid设置为空字符串,那么当您对其进行查询时,您将只获得id为空字符串的用户,而不应该是任何用户。因此,查询返回的是一个空集,并且您的页面没有正确显示用户id

您最初是如何识别用户的?他们登录时,您是否正在查询数据库?你在储存饼干吗?读塔罗牌?为了让它工作,在某个时候,您必须存储正确的用户ID,可能是在会话中。为此,您需要首先确定用户是谁


此外,如果您使用的是CF6+,则可能不需要cflock。它现在用于防止竞争条件,因为CF现在是线程安全的。

看起来您才刚刚开始使用CF,欢迎来到社区

如果我理解正确,我对代码的理解使结构看起来如下所示:


选择*FROM USERS WHERE USERS.ID_USERS=在代码中有没有设置session.IDUsers的地方?将其初始化为空白。Coldfusion不会为您填充它。会话作用域是一个地方,它将为用户记住您在指定的非活动时间段(通常为20分钟)内放置在那里的内容。因此,希望在运行查询之前的某个地方,您有其他逻辑来填充该逻辑,否则您将向数据库请求一个名为的用户

这只是一个风格问题,但以下几点可能更适合您:

<cfset Session.IDUsers =''>

<!--- Do something here to populate Session.IDUsers --->

<!--- Creates a blank query - not necessary, but can reduce errors later --->
<cfset Recordset1 = queryNew("UserID")>

<!--- Populate the query from the database --->
<cfquery name="Recordset1" datasource="cfGossip">
  SELECT *
  FROM   users
  WHERE  users.IDUsers = <cfqueryparam value="#Session.IDUsers#">
</cfquery>

<!--- If the query has data, use it, otherwise show generic message --->
<cfoutput>
<cfif Recordset1.recordcount>
    <p>Welcome #Recordset1.UserID#.</p>
<cfelse>
    <p>Welcome new user!</p>
</cfif>
</cfoutput>

<!--- OR since we used queryNew("userID"), we can simplify without throwing an error. ---->
<cfoutput>
    <p>Welcome <cfif len(Recordset1.userID)>#Recordset1.userID#.<cfelse>new user!</cfif></p>
</cfoutput>
如果要在文本中插入其他变量,将cfoutput放在段落块之外会更容易。但这两种方法都有效


不管怎样,除非您忘记共享更多的代码,否则我认为问题在于session.IDUsers是空的,需要在查询之前填充。我希望这有帮助

谢谢你的快速回复!我用的是ColdFusion 8,那我最好把它取下来,谢谢。当用户注册他们的信息进入MYSQL数据库时,当他们登录时,标识就来自那里——每个用户都有不同的ID和用户名,然后是电子邮件和密码。我不知道塔罗牌是什么,也不知道如何使用cookies,所以我不认为我在使用它们,除非自动输入。如何修复它以使会话变量不用于空字符串?cflock仅用于应用程序/服务器范围?在遇到竞争条件时,您随时都需要一个锁。也就是说,您编写了一个特定的值,如果该值被更改,事情就会中断,其他线程可能会更改该值。在正常情况下,应用程序范围或服务器范围不需要它,比如存储配置数据。@bridget,Tarot卡是开玩笑的。它们被用来告诉未来。应用程序中的某些内容需要设置值-它无法自行设置!如何做到这一点取决于应用程序的体系结构,但您可能希望在用户登录时进行设置。哈哈。好啊对不起,我才16岁,我只是从coldfusion开始。我应该向我的应用程序中添加什么样的代码-如下面所示。sessionmanagement=true?还是这还不够?谢谢你的帮助,我真的很感激。好的,耶,我是新来的。我从来没有做过一个动态开发的网站!这真的很难学,但我发现这个网站真的很有帮助-这里的人总是帮助你!但我不足以回答任何人的问题——所以我希望人们不会停止帮助我认为我只是一个“浸出者”,如果你知道我的意思的话。lol。不管怎样,通过更改cfset,您的意思是在in=中输入一个值。因为我想让它获得登录用户的ID,但不总是相同的值,所以我不确定该输入什么值。有什么想法吗?谢谢,B。哦,不用担心——ColdFusion社区总是乐于提供帮助。本质上,当用户提交登录表单时,在确定用户已成功登录的代码中,您需要将session.idUsers值设置为userID。不过,在该主页上,您需要一个以确保在有人尚未登录的情况下可以使用它,然后您可以通过查看是否有记录计数来显示欢迎消息。