ruby on rails,session expire notification

时间:2012-12-18 13:39:30

标签: ruby-on-rails ruby session

我使用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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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