解码base64 cookie时未设置会话中的user_id?

时间:2012-04-17 02:27:06

标签: ruby-on-rails session

  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 }

我的session[:foo]是如何设置的,而不是我的session[:user_id]

1 个答案:

答案 0 :(得分:1)

在我看来它已设置,但user_id的值是Marshal.dump输出(这是cookie存储的)是不可打印或空白字符。如果您对以这种方式只影响user_id的原因感兴趣,您必须查看编组格式的详细信息(似乎没有广泛记录)。我想用整数ruby基本上吐出字节值,这通常会导致unprintables。

我不知道你是如何进行base64解码的,但如果你在ruby控制台中这样做,那么inspect的默认输出会显示不可打印的字符