1

我正在使用本教程http://rubylearning.com/blog/2009/09/30/cookie-based-sessions-in-sinatra/中标题为“A Slightly Bigger Example”的示例中的代码来弄清楚如何将 cookie 发送到 Sinatra 应用程序,但我不知道如何正确设置值

当我在应用程序中将名称设置为“brandon”时,它会创建一个 cookie,其值BAh7BiIJdXNlciIMYnJhbmRvbg%3D%3D%0A是值的 url 编码 ( http://ostermiller.org/calc/encode.html )BAh7BiIJdXNlciIMYnJhbmRvbg==

使用该值,我可以正确地将 cookie 发送到应用程序

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

我很确定该值是会话的 ruby​​ 哈希的 base64 编码,因为文档(http://rack.rubyforge.org/doc/classes/Rack/Session/Cookie.html)说

session 是一个 Ruby Hash,存储为 base64 编码的编组数据集:key(默认值:rack.session)。

我认为这意味着我所要做的就是 base64 编码{"user"=>"brandon"}并在 curl 命令中使用它。不幸的是,这创造了不同于BAh7BiIJdXNlciIMYnJhbmRvbg==. 接下来,我尝试获取 base64 编码值并在线上在各种 base64 解码器上对其进行解码,但这会导致出现奇怪的字符(框符号等),因此我不知道如何重新创建该值以对其进行编码。

所以我的问题是你知道我需要什么字符/格式来获得正确的 base64 编码和/或你知道另一种使用 curl 传递值的方法,以便它将注册为 Sinatra 应用程序的正确 cookie?

4

1 回答 1

1

如果您的意思是用户名和密码是在登录页面上的表单中输入的,那么 cURL 可以“提交”该表单,例如:

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

如果你想存储返回的 cookie,你可以指定一个 cookie 文件:

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

并在以后的请求中使用这些 cookie:

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

或者如果您想同时发送和接收 cookie,则两者都做:

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

在元过滤器上找到了这个

于 2010-04-22T20:20:48.983 回答