知道Rails中新会话何时开始

我将从描述一个场景开始,我对其他方式持开放态度,但我想不出任何其他方式。

我在Rails 2应用程序上有匿名用户。 当一个新用户访问该网站时,我想放置一个cookie,说“我已经访问过该网站一次”并将其记录在我们的系统中。 用户离开并在一个月后回来我读了这个cookie,增加了访问次数(“我来过这里2次”)并将其记录在我们的系统中。

我的计划:

新会话开始时

  • 如果用户是新用户 – 创建cookie,请记录访问
  • 如果用户正在返回 – 读取cookie,增加值,写入cookie,登录访问

我现在被困住的地方是“当一个新的会话开始时”步骤。 如果您有.net背景,我正在寻找的是ASP.NET中的Session_Start。 我可以在每个请求上查询数据库,并检查是否已经记录了特定的会话ID,但这似乎效率低下。

实际上这是一个坏主意。 Rails将会话存储在db或文件系统中(tmp / sessions)。 如果您想知道,如果用户之前在页面上,您只是不删除会话(没有会话到期)。 但随后会话数量将增长到无限。

如果用户使用相同的浏览器返回同一台计算机,则会话仍将存在。 在您的应用程序/会话控制器中,您可以:

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: session)