2

Imルビー1.9.3とレール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分であるため、新しいユーザーと有効期限が切れたセッションのユーザーを区別することはできません。迅速で汚い解決策は、ユーザーが期限切れのセッションを持っているかどうかを知るために、グーグルアナリティクスクッキーの存在をテストすることです。

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 に答える