ruby-on-rails - 了解 Rails 中的新 session 何时开始

标签 ruby-on-rails session

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

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

我的计划:

新 session 开始时

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

  • 我现在卡在“新 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/

    相关文章:

    ruby-on-rails - 嵌套的 link_to_function/insert_html 导致 javascript 错误

    ruby-on-rails - 防止事件记录 INSERT 为 NULL?

    c# - 静态 session 类和多用户

    google-app-engine - Gorilla session 从 session golang 中提取结构值

    node.js - 使用原始node.js和cookie在客户端浏览器中存储 session ,而不使用express

    laravel - Auth::user() 不会跨子域传输? - Laravel 5.2

    ruby-on-rails - 执行 'case' 语句以匹配多个 'when' 条件

    ruby-on-rails - rails 条件形式/remote_form

    ruby-on-rails - 可追溯的匿名重复记录

    go - 如何从 gorilla 商店中删除用户 session ?