Персонализированные приветственные сообщения

Как создать приветственное сообщение на моей домашней странице с именем пользователя?

Перетаскивание динамических полей из набора записей на мою страницу не работает:

<cfoutput>#Recordset1.Username#</cfoutput>.

Он продолжает использовать первое имя пользователя в таблице, а не пользователя, под которым я вошел в систему. Нужно ли мне что-то добавлять на мою страницу Application.CFC? Я использую ColdFusion, Dreamweaver и MySQL, если это имеет значение.

Спасибо за вашу помощь.


person Bridget    schedule 01.12.2009    source источник


Ответы (2)


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

Несколько очень общих советов на данный момент.

Причина в том, что вы выбираете все (или, по крайней мере, более одной) записи. Когда вы делаете вывод только один раз, CF показывает только первую запись из набора данных. Вы можете проверить это, перебирая набор данных:

<cfloop query="Recordset1">
<cfoutput>#Recordset1.Username#</cfoutput><br />
</cfloop>

Он должен показать все ваши записи.

Как указал Джейсон, вы должны выбрать только одну запись вашего пользователя. Когда вы выполняете вход в систему, сохраните номер пользователя (обычно первичный ключ, идентификатор) в области сеанса (скажем, в Session.userid) и используйте его в запросах позже, как это (я не знаю ваш запрос, поэтому это просто для того, чтобы показать идею):

<cfquery datasource="datasourceName" name="Recordset1">
    SELECT Username FROM users WHERE id = <cfqueryparam cfsqltype="cf_sql_integer" value="#Session.userid#" />
</cfquery>

Предположим, что у вас есть уникальный идентификатор в качестве PK, вы получите только одну запись в Recordset1, поэтому ваш первоначальный вывод покажет правильное имя пользователя.

person Sergey Galashyn    schedule 01.12.2009
comment
хорошо, это куча. Должен ли я добавить в свой Application.CFC this.sessionmanagement='true' или что-то в этом роде? Вы знаете код, который я должен добавить? - person Bridget; 02.12.2009
comment
ОК, вот мои коды: Вот мой код для моей страницы входа: ‹cfif IsDefined(FORM.Username)› ‹cfset MM_redirectLoginSuccess=index.cfm› ‹cfset MM_redirectLoginFailed=login.cfm› ‹cfquery name=MM_rsUser datasource=cfComment› SELECT Username ,Пароль ОТ пользователей ГДЕ Имя пользователя=‹cfqueryparam value=#FORM.Username# cfsqltype=cf_sql_clob maxlength=45› И Пароль=‹cfqueryparam value=#FORM.Password# - person Bridget; 02.12.2009
comment
cfsqltype=cf_sql_clob maxlength=8› ‹/cfquery› ‹cfif MM_rsUser.RecordCount NEQ 0› ‹cftry› ‹cflock scope=Session timeout=30 type=Exclusive› ‹cfset Session.MM_Username=FORM.Username›‹br /› ‹cfset Session.MM_UserAuthorization=› ‹/cflock› ‹cfif IsDefined(URL.accessdenied) AND false› ‹cfset MM_redirectLoginSuccess=URL.accessdenied› ‹/cfif› ‹cflocation url=#MM_redirectLoginSuccess# addtoken=no› ‹cfcatch type=Lock›‹ !--- код для обработки тайм-аута cflock ---› ‹/cfcatch› ‹/cftry› - person Bridget; 02.12.2009
comment
‹/cfif› ‹cflocation url=#MM_redirectLoginFailed# addtoken=no› ‹cfelse› ‹cfset MM_LoginAction=CGI.SCRIPT_NAME› ‹cfif CGI.QUERY_STRING NEQ › ‹cfset MM_LoginAction=MM_LoginAction & ? & XMLFormat(CGI.QUERY_STRING)› ‹/cfif› ‹/cfif› И для набора записей моих индексных страниц, где я пытаюсь получить приветствие (имя пользователя) ‹cfquery name=Recordset1 datasource=cfComment› SELECT * FROM users WHERE users .IDПользователи ‹/cfquery› - person Bridget; 02.12.2009
comment
хаха. хорошо, это выглядит очень сложно, это не позволило бы мне добавить это в поле вопроса ... упс, извините. ржу не могу - person Bridget; 02.12.2009
comment
О боже... Пожалуйста, попробуйте поместить код в тело вопроса. Это не так сложно, как кажется, см. раздел помощи. Таким образом, это совершенно нечитаемо. - person Sergey Galashyn; 02.12.2009
comment
Да, вам нужно включить управление сеансом. Также см. эту действительно информативную и полезную справочную страницу livedocs.adobe .com/coldfusion/8/htmldocs/ - person Sergey Galashyn; 02.12.2009
comment
Это правильный / весь код, который мне нужен для того, чтобы файл application.cfc делал то, что я намереваюсь: sessionTimeout = #CreateTimeSpan(999, 0, 0, 0)# setClientCookies = yes setDomainCookies = yes› Спасибо. - person Bridget; 02.12.2009
comment
Технически да, но я бы не рекомендовал устанавливать такие огромные сроки действия: 999 дней, если этого недостаточно, особенно для сеанса, где он используется для уничтожения сеанса, когда кто-то покидает сайт без выхода из системы. Типичное время ожидания сеанса составляет около 30 минут (CreateTimeSpan(0,0,30,0)) и время ожидания приложения обычно обсуждается в часах, мой личный выбор для моих нужд обычно находится в диапазоне от 12 до 48. - person Sergey Galashyn; 02.12.2009
comment
в порядке. спасибо - но если пользователь активен более 12-48 часов, ему нужно будет снова войти в систему, чтобы добавить комментарий, потому что переменная сеанса больше не будет работать. Так будет ли автоматический выход из системы через 12-48 часов? - person Bridget; 02.12.2009
comment
12-48 часов — это продолжительность жизни области приложения, которая не должна иметь ничего общего с сеансами пользователей. Конкретная информация о пользователе должна обрабатываться с использованием области сеансов, срок действия которой должен истекать быстрее, поскольку в противном случае он может быть небезопасным (представьте, что кто-то использовал ваш сайт с общедоступного ПК и просто закрыл браузер без выхода из системы — кто-то может снова открыть его и получить доступ к личным данным) ). - person Sergey Galashyn; 03.12.2009

Похоже, вам нужно добавить предложение where в ваш запрос.

person Jason    schedule 01.12.2009
comment
Я только что попробовал, это то, что вы имеете в виду: ‹cfquery name=Recordset1 datasource=cfcommentsite› ​​SELECT * FROM users WHERE users.IDUsers ‹/cfquery› Он по-прежнему делает то же самое, есть идеи, почему? - person Bridget; 02.12.2009
comment
Вам нужно правильное выражение в предложении where. Предположим, вы храните идентификатор пользователя из базы данных для вошедшего в систему пользователя в session.userid. SELECT* FROM users WHERE users.IDUsers = ‹cfqueryparam type=cf_sql_integer value=#session.userid#› - person Ben Doom; 02.12.2009
comment
У меня не настроена переменная сеанса в моем логине для IDUsers - знаете ли вы, что я могу ввести какой-нибудь код, чтобы сделать это? ваше здоровье. - person Bridget; 02.12.2009