HttpClient发送请求Session无法保持的问题

gtolin 发布于 2015/09/29 16:13
阅读 2K+
收藏 1

@JFinal 你好,想跟你请教个问题:

我在Controller A里的方法A里利用HttpClient模拟请求Controller B里的方法B,请求是成功的,但是在方法B里无法获取到在方法A里利用setSessionAttr("user", user)保存的用户信息,什么原因?如何解决?

加载中
1
潇洒似风
潇洒似风

问题描述:Session在客户端是以cookie的方式存放的,当你在浏览器调用Controller A的时候,在请求头中会附带Cookie,而这其中就有Session的信息,而你在Controller A中使用HttpClient请求Controller B的时候其实相当于建立一个新的会话,是没有附带Session的Cookie,所以不可能获取到Session的信息。

解决办法:在ControllerA中使用HttpClient时添加从请求头中获取的cookie。

0
flygogo
flygogo

估计你这是两个服务,通过HttpClient的请求,那么就是通过http的方式的访问,也就是说这种走的是http协议,而http协议本身是无状态的,所以不可能拿到与http信息任何无关的信息的。

如果你非要使用这种方式弄到信息,那么你就在B需要序列化(如json)把user写到response中,然后A从response中得到序列化数据然后反序列化得到具体对象。

0
JFinal
JFinal
   请求 ControllerB 时,先通过 getCookieObjects() 得到 cookie 数组,看这个数组中是否有数据,session 是通过 cookie 机制实现的,httpclient 在发送请求时需要将 cookie 值在请求中一并发送过来才可以
0
maradona
maradona
PostMethod postMethod = new PostMethod(url);
postMethod.addRequestHeader("Cookie", "JSESSIONID=" + JSESSIONID);



0
g
gtolin

问题已解决:

String cookie = request.getHeader("Cookie");

PostMethod postMethod = new PostMethod(url);

postMethod.setRequestHeader("Cookie",cookie);

返回顶部
顶部