Зная, когда начинается новый сеанс в Rails - PullRequest
4 голосов
/ 22 мая 2011

Я начну с описания сценария, я открыт для других способов сделать это, но я не могу думать ни о каких других способах.

У меня есть анонимные пользователи в приложении Rails 2.Когда на сайт заходит новый пользователь, я хотел бы разместить файл cookie с надписью «Я посетил сайт 1 раз» и записать его в нашей системе.Пользователь уходит и возвращается через месяц. Я читаю этот файл cookie, увеличиваю количество посещений («Я был здесь 2 раза») и записываю это в нашу систему.

Мой план:

Когда начинается новый сеанс

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

Я застрял прямо сейчас на шаге «Когда начинается новый сеанс».Если у вас есть .net фон, то я ищу эквивалент Session_Start в ASP.NET.Я мог бы запрашивать базу данных при каждом запросе и проверять, зарегистрирован ли уже определенный идентификатор сеанса, но это кажется неэффективным.

1 Ответ

1 голос
/ 23 мая 2011

На самом деле это плохая идея. Rails хранит сеанс в БД или в файловой системе (tmp / session). Если вы хотите знать, был ли пользователь на странице раньше, вы просто не удаляете сеансы (ни один сеанс не истекает). Но тогда количество сеансов вырастет в бесконечность.

Если пользователь возвращается на тот же компьютер с тем же браузером, сеанс все еще будет там. В вашем приложении / контроллере сессии вы можете сделать:

session[:visits] ||= 0
session[:visits] += 1

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

session[:visits] ||= 0
now = DateTime.now.to_i
session[:visits] += 1 if session[:last_click] && session[:last_click] < (now - 60*30)
session[:last_click] = DateTime.now.to_i

Все еще плохая идея, потому что, если пользователь возвращается в другой браузер или компьютер, счетчик запустится снова. (Подробнее о сессиях: http://ruby.railstutorial.org/chapters/sign-in-sign-out#sec:sessions)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...