1

このチュートリアルhttp://rubylearning.com/blog/2009/09/30/cookie-based-sessions-in-sinatra/の「A Slightly Bigger Example」というタイトルの例のコードを使用して、 Sinatra アプリケーションに Cookie を送信しますが、値を正しく設定する方法がわかりません

アプリケーションで名前を「brandon」に設定すると、値のBAh7BiIJdXNlciIMYnJhbmRvbg%3D%3D%0AURL エンコード ( http://ostermiller.org/calc/encode.html ) である値を持つ Cookie が作成されます。BAh7BiIJdXNlciIMYnJhbmRvbg==

その値を使用して、Cookie をアプリに正しく送信できます

curl -b "rack.session=BAh7BiIJdXNlciIMYnJhbmRvbg==" localhost:9393

ドキュメント( http://rack.rubyforge.org/doc/classes/Rack/Session/Cookie.html)が言うので、値はセッションのルビーハッシュのbase64エンコーディングであると確信しています

セッションは、:key (デフォルト: rack.session) に設定された base64 でエンコードされたマーシャリングされたデータとして格納された Ruby ハッシュです。

つまり、base64 でエンコード{"user"=>"brandon"}して curl コマンドで使用するだけで済みます。残念ながら、それは とは異なる価値を生み出しますBAh7BiIJdXNlciIMYnJhbmRvbg==。次に、base64 でエンコードされた値を取得し、さまざまな base64 デコーダーでオンラインでデコードしようとしましたが、奇妙な文字 (ボックス記号など) になるため、値を再作成してエンコードする方法さえわかりません。

だから私の質問は、適切なbase64エンコーディングを取得するために必要な文字/形式を知っていますか、および/またはcurlを使用して値を渡し、Sinatraアプリの適切なCookieとして登録する別の方法を知っていますか?

4

1 に答える 1

1

ユーザー名とパスワードがログインページのフォームに入力されていることを意味する場合、cURL は次のようにそのフォームを「送信」できます。

curl -d "username=miniape&password=SecrEt" http://whatever.com/login

返された Cookie を保存する場合は、Cookie ファイルを指定します。

curl -c cookies.txt -d "username=miniape&password=SecrEt" http://whatever.com/login

後のリクエストでこれらの Cookie を使用するには、次のようにします。

curl -b cookies.txt -d "username=miniape&password=SecrEt" http://whatever.com/login

または、Cookie の送受信の両方が必要な場合は、両方を実行します。

curl -b cookies.txt -c cookies.txt -d "username=miniape&password=SecrEt" http://whatever.com/login

メタフィルターでこれを見つけた

于 2010-04-22T20:20:48.983 に答える