use*_*550 5 session ruby-on-rails
我将从描述一个场景开始,我对其他方法持开放态度,但我想不出任何其他方法。
我在 Rails 2 应用程序上有匿名用户。当新用户访问该网站时,我想放置一个 cookie,显示“我已访问该网站 1 次”,并将其记录在我们的系统中。用户离开并在一个月后回来,我读取此 cookie,增加访问次数(“我来过这里 2 次”)并将其记录在我们的系统中。
我的计划:
当新会话开始时
我现在陷入困境的是“当新会话开始时”步骤。如果您有 .net 背景,我正在寻找相当于 ASP.NET 中的 Session_Start 的功能。我可以针对每个请求查询数据库,并检查特定会话 ID 是否已被记录,但这似乎效率低下。
事实上这是一个坏主意。Rails 将会话存储在数据库或文件系统(tmp/sessions)中。如果您想知道用户之前是否在该页面上,您只需不要删除会话(会话不会过期)。但随后会话的数量将无限增长。
如果用户使用相同的浏览器返回同一台计算机,则会话仍将存在。在您的应用程序/会话控制器中,您可以执行以下操作:
session[:visits] ||= 0
session[:visits] += 1
Run Code Online (Sandbox Code Playgroud)
但每次点击它都会增加。因此,如果您只想计算访问次数,则还需要存储上次单击的时间,并且如果用户离开超过半小时左右,则只需递增。
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
Run Code Online (Sandbox Code Playgroud)
这仍然是一个坏主意,因为如果用户返回到不同的浏览器或计算机,计数器将再次启动。(有关会话的更多信息:http://ruby.railstutorial.org/chapters/sign-in-sign-out#sec :sessions)
| 归档时间: |
|
| 查看次数: |
3041 次 |
| 最近记录: |