2012-02-19 2 views
0

Я устанавливаю Kissmetrics в моем приложении rails, сохраняя события в переменной сеанса, а затем передавая их в javascript-код kissmetrics на следующей странице. Этот метод отлично работает, за исключением попыток отслеживания создания учетных записей. Похоже, что когда я храню созданное в аккаунте событие в своей переменной сеанса, он работает нормально, но к тому времени, когда загружается следующая страница, переменная сеанса ушла. Я поставил там отладчик, чтобы попытаться найти, где он удаляется, но кажется, что ничего нет. km_log_event - это метод, который хранит строку в переменной сеанса, называемой km_events. Вот мой код:Сессия переменной сбрасывается - не знаю, где это происходит

accounts_controller/создать ->

...  
if @account.save 
      log_event("Account", "Created", @account.name) 
      km_log_event("Account Created") 
      redirect_to(welcome_url(:subdomain => @account.subdomain)) 
      @user.activate! 
      @user.add_connection(params[:connect_to]) 
      else 
      render(:action => 'new', :layout => 'signup') 
      end 
... 

sessions_controller/прием ->

def welcome 
    if current_account.new? 
     # Create the session for the owner, the account is brand new 
     current_account.user_sessions.create(current_account.owner, true) 
    elsif current_account.users.last && current_account.users.last.created_at > 1.hour.ago 
     current_account.user_sessions.create(current_account.users.last, true) 
    end 
    redirect_to embedded_invitations_path 
    end 

Я просто не знаю, где он становится удален, так что я не могу запишите это событие. Кажется, что это происходит после @ account.save в контроллере учетных записей, но до приветственного действия.

UPDATE:

здесь модуль счета, где я верю (это не моя кодовая) current_account получает определен.

module Accounts 
    def self.included(controller) 
     controller.helper_method :current_account 
    end 

    protected 

     def current_account 
      return @current_account if defined?(@current_account) 
      @current_account = Account.find_by_subdomain!(current_subdomain) 
     end 
end 
+0

У вас отключено cookies? – bdon

ответ

0

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

Subdomain Session Not Working in Rails 2.3 and Rails 3 on Heroku with/without a Custom Domain?

+0

отлично. Я думаю, что это то, что я искал. Тем не менее, я не хочу хранить его между ВСЕМИ субдоменами (я думаю, что это вызовет проблемы с безопасностью, поскольку каждая учетная запись имеет свой собственный поддомен), но я хочу разрешить проведение сеансов между signup.website.com и любым поддоменом. website.com, но не между отдельными поддоменами. Как мне это сделать? –

3

Недопустимый токен csrf будет сброшен сеанс. Может ли это случиться?

Вы можете проверить это легко путем удаления следующих из контроллера (обычно в ApplicationController)

protect_from_forgery 
+0

Я удалил protect_from_forgery и все еще удалил его. Я положил km_log_event в приветственное действие после if current_account.new? и это, похоже, заставляет его работать. Тем не менее, мне все равно хотелось бы знать, почему сеанс var удаляется. –

+0

Как производится новый сеанс? Он стирает существующие? 'current_account.user_sessions.create' выглядит подозрительно. –

+1

сеанс var удаляется до этой строки кода. Есть ли другой способ предложить это? –