2017-01-06 9 views
2

Я объявила глобальную переменную в моем контроллере приложений 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 < application_controller.rb

if $decrypted_attessec.empty? 
    before_action :validate_user, :except => [:index, :csplogin] 
end 

Где я пошел не так с кодом?

+0

Ruby on Rails не имеет гражданства, поэтому закрытие браузера не будет иметь никакого эффекта. Глобальные переменные обычно считаются плохой практикой. Похоже, вам может понадобиться переменная сеанса? Что ты пытаешься сделать? – mysmallidea

+2

Если на вашем сервере подключено много браузеров, то когда нужно свернуть глобальную переменную? – Aetherus

+2

обнаружение, когда браузер закрывается, не встроен в рельсы, для этого вам необходимо использовать AJAX или websockets. –

ответ

5

Прежде всего, @global_variable не является глобальной переменной вообще. Это, фактически, переменная экземпляра объекта вашего класса.

Во-вторых, глобальные переменные определены с предшествующим $, например $global_variable. См. this excellent post, чтобы узнать больше о последствиях использования глобальных переменных.

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