【问题标题】:Rails Detect If User's Very First VisitRails 检测用户是否是第一次访问
【发布时间】:2016-01-29 06:26:29
【问题描述】:

如果用户是第一次访问该网站,我会尝试让他们填写一份调查问卷。

我的控制器是这样设置的:

class MainController < BaseController
end

class BaseController < ApplicationController
  before_filter :first_time_visiting?
end

class ApplicationController < ActionController::Base
  def first_time_visiting?
    if session[:first_time].nil?
      session[:first_time] = 1
      redirect_to questionnaire_path unless current_user
    end
  end
end

当我关闭浏览器并重新打开它时,我总是被重定向到调查问卷。

【问题讨论】:

    标签: ruby-on-rails session


    【解决方案1】:

    您必须在浏览器中为该用户设置一个 cookie,以便以后检测,即在用户关闭浏览器之后。在 rails 中设置和读取 cookie 很容易。查看文档以获取一些示例用法。 http://api.rubyonrails.org/classes/ActionDispatch/Cookies.html

    【讨论】:

    • 出于某种原因,我认为会话内容已经放入了 cookie 中。不过很简单:cookies.permanent[:first_time] = 1
    • 会话内容确实进入了 cookie,但不是持久的。当浏览器关闭时,该 cookie 会被清除。您想在 cookie 上为将来的日期设置“过期”,将其保留为 nil 将导致它在浏览器关闭时也被删除。
    • 这就是为什么这是不可能的。
    【解决方案2】:

    偶然发现这个问题,我的解决方案只是 jQUery 并涉及设置 localStorage(确保你有一个 polyfill)。隐藏您只想显示一次的元素。

    $(function() {
      if ( localStorage.getItem('visited') ) {
        return;
      }
    
      var $el = $('.only-show-on-first-visit');
      $el.slideDown(800);
      localStorage.setItem('visited', true);
      $el.find('.close').click(function() {
        $el.slideUp();
      });
    });
    
    
    // polyfill
    if (!('localStorage' in window)) {
      window.localStorage = {
        _data       : {},
        setItem     : function(id, val) { return this._data[id] = String(val); },
        getItem     : function(id) { return this._data.hasOwnProperty(id) ? this._data[id] : undefined; },
        removeItem  : function(id) { return delete this._data[id]; },
        clear       : function() { return this._data = {}; }
      };
    }
    

    【讨论】:

      【解决方案3】:

      在您的用户表中添加“上次登录时间”字段。当那是 nil 做 foo 和 !nil 做 bar。

      【讨论】:

      • 问卷不一定要求用户登录。
      猜你喜欢
      • 2013-03-19
      • 2019-02-15
      • 1970-01-01
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多