【发布时间】:2017-01-06 04:19:57
【问题描述】:
我在我的rails 应用程序控制器中将一个全局变量声明为$decrypted_attessec = "verified decrypted cookie",并且我正在我的所有控制器中访问它。关闭浏览器窗口后,必须将全局变量设置为 nil 或销毁,这还没有完成。
在我的情况下,它始终保持初始值 "verified decrypted cookie" 在这种情况下,但是,服务器重启会破坏全局变量并重新初始化它,我也想在关闭浏览器时完成。
我的代码:
application_controller.rb
def validate_user
$decrypted_attessec = "verfied decrypted cookie"
#I am getting value of $decrypted_attessec as verfied decrypted cookie from different action which would be either an empty or non-empty string
if !$decrypted_attessec.empty?
#redirect_to clicked path
else
redirect_to "login url"
end
end
Welcome_controller.rb
if $decrypted_attessec.empty?
before_action :validate_user, :except => [:index, :csplogin]
end
我的代码哪里出错了?
【问题讨论】:
-
Ruby on Rails 是无状态的,因此关闭浏览器将不起作用。全局变量通常被认为是一种不好的做法。听起来您可能想要一个会话变量?你想做什么?
-
如果有很多浏览器连接到你的服务器,那么什么时候取消全局变量?
-
检测浏览器何时关闭不是rails内置的,你需要使用AJAX或websockets。
-
这听起来像xy problem 对我来说。你能解释一下你试图达到的目标吗?为什么您的应用程序需要知道用户何时关闭浏览器?
-
看起来您正在尝试构建身份验证功能,并在应用程序中使用全局变量。那是对的吗?您是否知道在这种情况下多个用户可能共享同一个变量以及这可能如何影响应用的安全性?
标签: ruby-on-rails ruby browser global-variables