1

我在我的 Rails 应用程序上安装 Kissmetrics,方法是将事件存储在会话变量中,然后将它们传递到后续页面上的 Kissmetrics javascript 代码中。除了尝试跟踪创建的帐户外,此方法效果很好。似乎当我将帐户创建事件存储在我的会话变量中时它工作正常,但是在下一页加载时,会话变量已经消失了。我把调试器放在那里试图找到它被删除的地方,但似乎什么都没有。km_log_event 是一种将字符串存储在名为 km_events 的会话变量中的方法。这是我的代码:

帐户控制器/创建 -->

...    
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
...

session_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 之后但在欢迎操作之前。

更新:

这是我认为定义 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
4

2 回答 2

3

无效的 csrf 令牌将重置会话。这会发生吗?

您可以通过从控制器中删除以下内容(通常在 ApplicationController 中)轻松测试这一点

  protect_from_forgery
于 2012-02-19T19:52:41.173 回答
0

我认为这是在您尝试在子域之间共享会话时发生的。为此,您必须进行一些配置。

在有/没有自定义域的 Heroku 上参考子域会话在 Rails 2.3 和 Rails 3 中不起作用?

于 2012-02-20T10:12:09.100 回答