Saving HTTP Referer

I'm trying to save the site that a user came from when they sign up.
Right now I have a before_filter in my ApplicationController:

before_filter :save_referer

  def save_referer
    unless is_logged_in?
      session['referer'] = request.env["HTTP_REFERER"] unless
session['referer']
    end
  end

def create
@user = User.new(params[:user])
if @user.save_with(session[:referer]) .... end

User def save_with(referer) self.referer = referer unless referer ==
"null" self.save
end

Then when a user is created, it checks this session variable and sets
it to nil. This is buggy as it only works sometimes and I cannot seem
to figure out why. Any ideas what could be going on?

Because HTTP_REFERER is *not* a required header, and in fact
some security software blocks it for privacy reasons.

So you just can't count on it being available.

Aha, is there any way to figure out where a user comes from every
time?

Short answer: no

Longer and probably not better answer: if by "every time" you mean
100% certainty, no *BUT* you could spend an interesting amount of
money approaching, on a very steep curve, that point.

Or so I'd think. But really, for the purposes of this discussion: no :slight_smile:

install google analytics.. It has this functionality, and without
spending days/weeks/months on this problem, chances are they'll do it
better.