Как проверить, только что пользователь начал новую сессию?

Я хочу определить, начал ли пользователь новый сеанс в моем приложении Rails. В настоящее время я использую реферер HTTP, чтобы определить, что такое новый сеанс. Но я не уверен, что это правильный путь. Следующий код написан на Ruby.

if !request.referrer || !request.referrer.start_with?(request.protocol + request.host_with_port)
  # If the user came from another site or came here directly, then we regard it as a new session
else
  # Not a new session
end

person Trantor Liu    schedule 31.10.2015    source источник
comment
Посмотрите, поможет ли это: stackoverflow.com/questions/6085607/   -  person K M Rakibul Islam    schedule 31.10.2015
comment
Что вы имеете в виду под новой сессией? Они повторно подключились после закрытия своего старого сеанса, или у них есть два одновременных сеанса, и вы хотите ограничить их одним?   -  person the Tin Man    schedule 31.10.2015


Ответы (1)


Вы можете сохранить атрибут в сеансе при первом посещении пользователем. Если атрибут установлен, вы можете с уверенностью заключить, что они посещали ваш сайт раньше.

Однако, если атрибут не установлен, это может означать многое:

  • пользователь впервые посещает ваш сайт
  • пользователь мог удалить свои файлы cookie, и вы не можете сказать, что они возвращаются
  • пользователь может зайти из другого браузера или с другого устройства

Вот как бы вы это закодировали

if session.has_key?(:visited_before)
  # user has visited before
else
  # new user
  session[:visited_before] = true
end

Вам следует опасаться

  • где хранятся сеансы и ограничения памяти, но я бы не позволил этому помешать вам начать работу, если только это не веб-сайт с высоким трафиком.
  • googlebot и другие сканеры поисковых систем, вы можете обнаружить их в заголовках пользовательского агента и не устанавливать сеанс.
person omarshammas    schedule 31.10.2015
comment
Ограничение проверки реферера заключается в том, что вы не можете отслеживать пользователя при нескольких посещениях. например. пользователь посещает ваш сайт, уходит, а затем снова возвращается, вы будете рассматривать его как нового пользователя. Хотя вы сталкиваетесь с той же проблемой с сеансами, вы сможете отслеживать пользователя в течение более длительного периода времени (пока он не очистит историю своего браузера или пока сеанс не истечет, если вы установите это) - person omarshammas; 01.11.2015
comment
Понимаю. Но я не хочу определять, является ли пользователь новым или нет. Я хочу определить сеансы, то есть сеансы в Google Analytics. Поэтому, если пользователи закрывают браузер и возвращаются снова, это следует считать новым сеансом. - person Trantor Liu; 02.11.2015