我有一个系统,根据登录用户我需要设置一些类变量,因为每个数据库表名都有变化,并且与webserver通信的密钥变为,它是用户文档。 / p>
我的用户类变量,比如全局变量,它是否是线程安全的?有很多用户使用系统将事情保存在错误的地方的任何机会吗?
我只是在会话上设置了密钥并填写了Configuracao类
def set_variables
if current_usuario
session[:seller_document] ||= current_usuario.documento
Configuracao.logged_in_document = current_usuario.documento
end
end
答案 0 :(得分:1)
对于线程安全,您不需要使用类变量。
会话对象是一个cookie,因此如果用户在每次访问后清除了cookie,则该特定会话中的一个特定“用户”仅限于该用户。因此,访问您网站并将其用作网络服务的另一个应用程序将获得cookie。
通常在过滤器之前的应用程序中,您将登录“用户”并使用用户凭据设置会话,因此您希望访问您的服务的应用程序通过提供身份验证凭据来“登录”。这可能是确保始终设置seller_document的好地方。
这里没有多线程问题,因为您没有专门分支进程。
将Rails应用程序作为Web服务是完全正常的。您正在执行rails要执行的所有操作,而不需要在标准Rails应用程序所需的正常安全性和开发注意事项之上进行任何特殊考虑。
答案 1 :(得分:1)
以这种方式使用类变量不是线程安全的。你可以使用本地线程(即Thread.current[:some_key])
,但总的来说这对我来说就像是一种设计气味。