2009-12-01 2 views
0

Почему это не работает? Моя приветственное сообщение, он просто не показывает:Переменные сеанса, приветственные сообщения

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

Я не уверен, если это работает, или необходимо?

ответ

1

Если вы задали идентификатор пользователя, хранящийся в сеансе, пустой строкой, то при запросе на него вы получите только пользователей, для которых идентификатор - это пустая строка, которая не должна быть ни одной из них. Поэтому запрос возвращает пустой набор, и ваша страница (правильно) не отображает идентификатор пользователя.

Как Вы изначально можете идентифицировать пользователя? Вы запрашиваете базу данных при входе в систему? Вы храните куки? Чтение карт Таро? Чтобы это сработало, в какой-то момент вам нужно сохранить правильный идентификатор пользователя, возможно, в сеансе. Для этого вам нужно сначала определить, кто такой пользователь.

Кроме того, если вы используете CF6 +, вам, вероятно, не нужен cflock. В настоящее время он используется для предотвращения условий гонки, поскольку CF теперь поточно-безопасен.

+0

Спасибо вам за быстрый ответ! Я использую ColdFusion 8, мне лучше снять его, спасибо. Когда пользователь регистрирует свою информацию, входит в базу данных MYSQL, и когда они регистрируются, идентификация поступает оттуда - у каждого пользователя есть другой идентификатор и имя пользователя, а затем адрес электронной почты и пароль. Я не уверен, что такое карты Таро или как использовать куки-файлы, поэтому я не думаю, что я их использую, если они автоматически не вставлены (?). Как я могу это исправить, поэтому переменная сеанса не для пустой строки? – Bridget

+0

cflock необходим только для области применения/сервера? – Henry

+0

Вам нужен замок в любое время, когда вы можете столкнуться с условиями гонки. То есть вы пишете определенное значение, и если это значение изменяется, все ломается, а другие потоки могут изменять это значение. Вы не нуждаетесь в ней для области применения или области сервера при нормальных обстоятельствах, например, для хранения данных конфигурации. –

0

Похоже, вы только начинаете с CF, добро пожаловать в сообщество.

Мое понимание кода делает структуру выглядеть следующим образом, если я правильно понять вас:

<cfset session.idUsers = '' />
<cfquery datasource = "cfgossip" name = "recordset1">
SELECT * FROM USERS WHERE USERS.ID_USERS = <cfqueryparam cfsqltype = "cf_sql_integer" value = "#session.idUsers# />
</cfquery>
<cfoutput>Welcome #recordset1.userID#</cfoutput>

Причина этого не работает, потому что ваше значение session.idUsers пустое. Предполагая, что у вас есть пользователь в своей базе данных с значением ID_USERS 1, вы можете изменить CFSET, чтобы он выглядел, и он должен возвращать результаты.

Кроме того, пока замечательно видеть, что вы используете CFQUERYPARAM, я бы рекомендовал включать атрибут CFSQLTYPE в тег, когда это возможно, чтобы предоставить дополнительную линию защиты от инъекций. Вы можете посмотреть http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=Tags_p-q_18.html, чтобы просмотреть список доступных типов.

+0

OK, yer, я новичок. Я никогда не делал сайт, который нужно делать с Dynamic Development! Это очень сложно узнать, я нашел этот сайт очень полезным, хотя - люди вам помогут здесь! Но я недостаточно хорош, чтобы отвечать на все вопросы elses, поэтому я надеюсь, что люди не перестанут помогать мне думать, что я просто «leacher», если вы знаете, что я имею в виду. лол. В любом случае, изменяя cfset, вы подразумеваете значение в '' in = ''. Потому что я хочу, чтобы он получил идентификатор для входа пользователя в систему, а не всегда одно и то же значение, поэтому я не уверен в том, какую ценность внести. Любые идеи? спасибо, Б. – Bridget

+0

О, не беспокойтесь - сообщество ColdFusion всегда рад помочь. По существу, когда ваши пользователи отправляют форму для входа в систему, а в коде, который определяет, что пользователь успешно выполнил вход в систему, вы должны установить значение session.idUsers как идентификатор пользователя. Однако на этой домашней странице вам понадобится , чтобы убедиться, что у него есть что-то использовать, если кто-то еще не вошел в систему, а затем вы можете проверьте, есть ли у вас счетчик записей (через ), чтобы отобразить приветственное сообщение. –

0

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

Смежные вопросы