使用HttpURLConnection读取会话变量

时间:2014-02-28 16:54:06

标签: java android session-variables httpurlconnection

我正在尝试使用 HttpURLConnection 登录网站。

如果登录成功,服务器会在当前会话中设置user_id变量。

在问题上使用SO和Google developer docs我能够将我的凭据发布到服务器,但是如何从会话中获取user_id?

以下是我的代码:

String body = "user=chris&password=geheim";
HttpURLConnection conn = (HttpURLConnection) new URL(LOGIN_URL).openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");
conn.setInstanceFollowRedirects(false);

conn.connect();
OutputStream out = conn.getOutputStream();
BufferedInputStream in = new BufferedInputStream(conn.getInputStream());

out.write(body.getBytes());
int response = conn.getResponseCode();
String s = "";
for (int c = in.read(); c != -1; c = in.read()) {
    s += (char) c;
}
System.out.println(response);
System.out.println(s);
System.out.println(conn.getHeaderFields());

注意:为了便于阅读,我省略了所有异常处理和资源管理。这也只是连接到我的localhost的试用代码,所以不用担心硬编码凭证和其他不安全因素。

更新

好吧,显然我的身体毕竟没有被提交。当我在服务器代码中执行console.log(util.inspect(req.body))时,它会打印{}。我仔细检查了请求方法,那就是POST。我究竟做错了什么?

重写了代码,即使我认为我做的与现在工作之前完全相同。很奇怪,但无论如何。

2 个答案:

答案 0 :(得分:2)

存储user_id的会话保留在服务器上。所有客户端通常获取的是会话cookie(例如JSESSIONID)中的会话ID,该会话cookie被传递回服务器,以便服务器可以再次找到正确的会话和数据。

这就是为什么你也可以将大量数据放入用户的会话中...想象所有这些实际上都传递给了客户端!

答案 1 :(得分:0)

除非服务器中有合作活动页面,否则您无法提供给您。