知道新会话何时在Rails中启动

时间:2011-05-22 02:09:23

标签: ruby-on-rails session

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

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

我的计划:

新会话开始时

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

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

1 个答案:

答案 0 :(得分:1)

实际上这是一个坏主意。 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:sessions