2

我正在使用 ruby​​ 1.9.3 和 rails 3.2。

我的实际会话处理如下所示:

会话助手

    def sign_in(user)
            cookies[:remember_token] = {value: user.remember_token, expires: 20.minutes.from_now.utc}
            self.current_user = user
    end

    def sign_out
            self.current_user = nil
            cookies.delete(:remember_token)
    end

    def signed_in?
            if current_user.nil?
                    return false
            else
                    cookies[:remember_token] = {value: current_user.remember_token, expires: 20.minutes.from_now.utc}
            end

    def current_user=(user)
            @current_user = user
    end

    def current_user
            @current_user ||= User.find_by_remember_token(cookies[:remember_token])

    end

应用控制器

class ApplicationController < ActionController::Base
  before_filter :check_signin
  protect_from_forgery
  include SessionsHelper

  def check_signin
        unless signed_in?
        redirect_to signin_path
        end
  end
end

如果会话已过期,我想通知用户@登录页面。如何检查会话是否过期?请给出一个代码示例。

4

2 回答 2

1

由于您的 cookie 将在 20 分钟后过期,因此您无法区分新用户和会话已过期的用户。一个快速而肮脏的解决方案是测试谷歌分析 cookie 的存在,以了解用户是否有过期的会话。

def check_signin
  unless signed_in?
    flash[:notice] = "Your session has expired" if cookie['_utma']
    redirect_to signin_path
  end
end
于 2012-12-18T15:24:07.577 回答
1

@sailor 解决方案是正确的,但您不应该使用“_utma”cookie。我宁愿创建一个新的!

于 2012-12-18T16:18:44.067 回答