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 }

为什么 mysession[:foo]设置但不是 my session[:user_id]

4

1 回答 1

1

在我看来它已设置,但它的值user_id是这样的,它的Marshal.dump输出(这是 cookie 存储的)是不可打印的或空白字符。如果您对为什么 onlyuser_id会以这种方式受到影响感兴趣,则必须查看 marshal 格式的详细信息(似乎没有被广泛记录)。我猜想对于整数,ruby 基本上会吐出字节值,这通常会导致无法打印。

我不知道您是如何进行 base64 解码的,但是如果您在 ruby​​ 控制台中进行解码,则检查的默认输出确实显示不可打印的字符

于 2012-04-17T03:02:39.340 回答