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