我将从描述一个场景开始,我对其他方法持开放态度,但我想不出任何其他方法。
我在 Rails 2 应用程序上有匿名用户。当新用户访问该站点时,我想放置一个 cookie,上面写着“我已经访问了该站点 1 次”并将其记录在我们的系统中。用户离开并在一个月后回来,我阅读了这个 cookie,增加了访问次数(“我来过这里 2 次”)并将其记录在我们的系统中。
我的计划:
新 session 开始时
我现在陷入困境的地方是“新 session 开始时”步骤。如果您有 .net 背景,我正在寻找相当于 ASP.NET 中的 Session_Start。我可以在每个请求上查询数据库并检查是否已经记录了特定的 session ID,但这似乎效率低下。
最佳答案
其实这是个坏主意。 Rails 将 session 存储在数据库或文件系统 (tmp/sessions) 中。如果您想知道用户之前是否在该页面上,您只需不要删除 session (没有 session 过期)。但是随后 session 的数量将增长到无穷大。
如果用户使用相同的浏览器在同一台机器上返回, session 将仍然存在。在您的应用程序/ session Controller 中,您可以执行以下操作:
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
仍然是一个坏主意,因为如果用户在不同的浏览器或计算机上返回,计数器将重新启动。 (有关 session 的更多信息: http://ruby.railstutorial.org/chapters/sign-in-sign-out#sec:sessions )
关于ruby-on-rails - 了解 Rails 中的新 session 何时开始,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6085607/