Как установить и проверить сеанс в Coldfusion 11? - PullRequest
0 голосов
/ 25 июня 2018

Я очень новичок в ColdFusion.Я строю очень простую систему, в которой мне нужно установить переменную сеанса в случае успешного входа в систему.Но я не знаю, как установить сеанс в ColdFusion или как проверить его на страницах приложения.

Я искал решение, но не смог найти удовлетворительное решение.Мне нужен пример, в котором сеанс устанавливается при входе в систему и уничтожается при выходе из системы.Я прочитал о Application.cfm, но где находится этот файл?Это может быть простой вопрос и может повторяться в некоторых отношениях.Спасибо.

1 Ответ

0 голосов
/ 27 июня 2018

Прежде всего вам следует использовать:

Application.cfc

Вы можете использовать:

OnSessionStart

В этом случае вам не нужно блокировать переменные сеанса, поскольку Coldfusion позаботится об этом. Если вы устанавливаете переменную сеанса вне этого метода, вам может потребоваться заблокировать переменную, например:

Перед входом в систему:

<cfif NOT StructKeyExists(session,"authenticated")>
  <cflock scope="session" timeout="30" type="exclusive">
    <cfset session.authenticated = false />
  </cflock>
</cfif>

Создание новой учетной записи:

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

https://github.com/tonyjunkes/BCryptCFC

<cfset salt = BCrypt.genSalt()>
<cfset hash = BCrypt.hashString("password", salt)>

Подтверждение логина:

После того, как пользователь вошел в систему, используйте BCrypt (), чтобы проверить, соответствует ли пароль открытого текста хешу пароля в вашей БД:

<cfset BCrypt.checkString("password", hash)>

Также убедитесь, что 'username' [e-mail] совпадает ...

Если проверка BCrypt () прошла успешно, установите переменную 'session':

<cflock scope="session" timeout="30" type="exclusive">
  <cfset session.authenticated = true />
</cflock>

Это очень простая реализация того, как должен работать логин, но он дает вам представление о том, как начать работу.

Другой совет: если вы блокируете переменные 'сеанса', то вместо того, чтобы постоянно использовать:

<cflock>

При чтении из сеанса было бы целесообразно преобразовать переменную sesssion в область видимости переменных, например:

<cflock scope="session" timeout="10" type="readOnly">
  <cfset variables.lckauthenticated = session.authenticated />
</cflock>

Затем вы можете использовать:

variables.lckauthenticated

За пределами тега <cflock>.

Теперь, есть некоторые споры о том, нужно ли вам блокировать переменные «сессии», но мое правило, которое рекомендуется в официальной документации Adobe, - блокировать переменные «сессии», если вы читаете и пишете в их вне onSessionStart.

Затем, когда ваш пользователь выходит из системы, просто установите:

<cflock scope="session" timeout="30" type="exclusive">
  <cfset session.authenticated = false />
</cflock>

Затем вы можете использовать этот флаг, чтобы определить, что отображается для вашего пользователя. Я обычно устанавливаю несколько переменных сессии во время успешного входа в систему, например:

session.userid
session.roleid

Есть и другие вещи, такие как ротация сессий, которые помогают защитить вашу сессию, но это более сложные темы для другого поста ...

...