新手问题 rest-client 向登录接口发送 post 请求后服务端不保存 session?

msl12 · 2016年07月27日 · 最后由 yakjuly 回复于 2016年07月28日 · 3402 次阅读

我用postman的时候向登录的接口登录一次后,可以让服务端有类似session[:user_id] = @user.id的实现。

但是,使用rest-client写如下代码:

RestClient.post(url, :mobile => mobile, :password => password) # mobile和password是两个变量

会发现虽然登录后返回了用户资料json,但实际上session并没有保存。。

那该怎么使用rest-client来让服务端登录后保存我的session呢?

共收到 17 条回复

rails 默认的 session 机制是保存在 cookie里面的,并不是存在服务器上

那怎么让rest-client存这个cookie呢? 😯

> a.cookies
 => {"rack.session" => ...}

这个session不是吧?

  1. 你知道session怎么工作吗?
  2. 你知道RestClient和浏览器访问的区别吗?
  3. RestClient第二次发请求,和浏览器第二次打开一个页面区别在哪里?
  4. Postman发请求是不是相当于浏览器发请求? 搞懂了就知道你的答案了。

#4楼 @yakjuly 所以用rest-client无法达到保存session的目的?

#5楼 @msl12 客户端只保存cookies,客户端不懂啥叫session。

#6楼 @chareice 那么,rest-client无法在本地保存cookies,是么? 😐

#4楼 @yakjuly 我以为restclient 就是curl 的一个高级封装, curl 本身可以完成浏览器的各种操作吧,包括 session cookie referer等,只需要修改相应的配置就可以了。 当然默认情况下和浏览器是有区别的。或者我理解的不正确?

postman 和 curl 应该是一个道理?

@jicheng1014 @msl12

我都把问题点出来了,下次自己搜google。

http://www.justinweiss.com/articles/how-rails-sessions-work/

When you request a webpage, the server can set a cookie when it responds back: Your browser will store those cookies. And until the cookie expires, every time you make a request, your browser will send the cookies back to the server:

http://stackoverflow.com/questions/10758105/difference-between-curl-and-web-browser

#10楼 @yakjuly

Hello, 我想您误解了我的意思了,我的意思是 只要正确的配置 ,浏览器对web的访问是可以用 curl 实现的

浏览器访问的本质,就是发送 http 请求

服务器端处理 http 协议,无论你是浏览器请求的还是 curl 请求的抑或是其他请求,只要符合协议规范,都会处理。 curl 可以设置 cookie headers referer 等内容

cookie是存在浏览器上的。rest-client 可以模拟浏览器请求操作,请求的时候可以带上各种参数,比如 cookie, headers,referer。比如你的登入操作,账号和密码传到服务器,服务器识别后,会生成cookie值,这个值一般情况保存在浏览器中,使用signed的话就是个加密的字符串。你可以尝试下: 先用浏览器进行登入,浏览器会存登入的cookie值。然后,再用rest-client 发起请求,每次都带着这个cookie,看下是否能获得登入后访问的权限。如果你第一次登入就用rest-client,服务器生成的cookie值是否会没地方保存了,因为 要浏览器作为保存的地方(其中,浏览器帮我们做了多少事具体我就不知道了),而rest-client 不是浏览器,他能模拟浏览器的请求操作,而没法做浏览器的存储操作等等。不知道是不是这个原因,有木有浏览器开发的大牛。。。

#11楼 @pathbox 我也是差不多这样想的,就是好奇能不能做存储的动作 😬

#13楼 @msl12 可以自己写逻辑把session存redis 或 mysql中。你想让rest-client 帮你存cookie,看看文档有木有讲,我觉得不太可能

res = %x[curl #{lurl} -s -c /tmp/cookies -d #{user} -d #{psd} ]

我用curl 做的,第一次用 -c 保存一下

第二次用 -b 使用上次的cookies

ares = %x[curl -s -b /tmp/cookies #{aurl}]

这不是最好的方法,但能用

#15楼 @nil 你这名字就能测注入 😂

#11楼 @jicheng1014 你说的没错,楼主应该是没有考虑cookie这一套

msl12 关闭了讨论 09月18日 10:24
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册