0
  def create
    user = User.find_by_email(params[:email])

    if user && user.authenticate(params[:password])
      session[:foo] = "bar"
      session[:user_id] = user.id
      redirect_to root_url, notice: "Signed in!"
    else
      flash.now[:error] = "Email or password is invalid."
      render "new"
    end
  end

base64 Cookie をデコードすると、次のようになります。

{I"session_id:EFI"%14cd484a34917f7d923ef8222c16e0e1;TI"foo;FI"bar;FI"_csrf_token;FI"1ajWlOZok1Amp8Nh9uOdUWzeM20b873zocEbyiR+b1ao=;FI"user_id;Fi }

my が設定されているのにmysession[:foo]が設定されていないのはsession[:user_id]なぜですか?

4

1 に答える 1

1

設定されているように見えますが、の値は、user_id出力Marshal.dump(Cookie が格納するもの) が印刷できない文字または空白文字であるようなものです。このようにのみが影響を受ける理由に興味がある場合user_idは、マーシャル形式の詳細を調べる必要があります (これは広く文書化されていないようです)。整数を使用すると、ルビーは基本的にバイト値を吐き出すため、しばしば印刷不能になると思います。

そのbase64デコードをどのように行っているのかわかりませんが、Rubyコンソールで行うと、inspectのデフォルト出力に印刷できない文字が表示されます

于 2012-04-17T03:02:39.340 に答える