【问题标题】:Rails 3: How to tell if a user has visited a page before?Rails 3:如何判断用户之前是否访问过页面?
【发布时间】:2011-06-27 01:14:00
【问题描述】:

我有一个带有简单 jquery 动画的 Rails 应用程序(使用 Authlogic 进行身份验证),我只想在第一页加载时运行一次。我知道关键是检查 cookie 或其他东西以查看用户之前是否访问过该页面。请原谅我的笨拙,我对 HTTP cookie 或会话知之甚少。

那么,查看访问用户(即使他们尚未登录)是否是第一次查看页面的最佳方法是什么?

编辑:好的,所以我意识到我并没有完全清楚。

我花了几个小时研究类似的问题并阅读 Rails API 文档以了解 cookie 和会话,但我仍然无法想象如何为我网站中的每个页面实现 visited? 函数只有在用户第一次访问该页面后才会设置为“true”。我查看了所谓的“重复”问题 Rails Detect If User's Very First Visit 和相应的答案,但仍然无法弄清楚。

这是我的“页面”控制器:

def home
    @title = "Home"
end

def contact
    @title = "Contact Us"
end

dd

还有我的 jquery javascript 做一个简单的动画:

$(document).ready(function() 
 {
if (!$.cookie('visited')) {
    $('.title .flying-text').css({opacity:0});
    $('.title .active-text').animate({
        opacity:1,
        marginTop: "-150px",
        }, 5000);
}
 });

我只希望它显示用户之前是否未访问过该页面。我不知道如何在 Rails 中正确设置 cookie,也不知道将它放在哪里,也不知道如何确保动画脚本可以访问完全相同的 cookie 值。有人可以帮帮我吗?

~丹

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-3 cookies


【解决方案1】:

你可以这样设置一个cookie:

cookies[:welcomed] = {:value => true, :expires => Time.now + 6.months}

从 jquery 做一个小函数

function readCookie(name) {
    var nameEQ = name + "=", ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i += 1) {
        var c = ca[i];
        while (c.charAt(0) === ' ') { 
            c = c.substring(1, c.length);
        }
        if (c.indexOf(nameEQ) === 0) {
            return c.substring(nameEQ.length, c.length);
        }
    }
    return null;
}

并称之为#in js

  if (readCookie('welcomed') == null){}

【讨论】:

    【解决方案2】:

    忽略来自 Javascript 的 cookie。

    使用作为重复引用的问题,使用永久蒸煮器,并在第一次运行时,从 Rails 为您的身体设置一个类(比如说first-run)。然后,让你的 javascript 检查 body 是否有 first-run 类。此时,您可以让 javascript 执行它的第一次运行代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多