[英]Read session variable using HttpURLConnection
我正在尝试使用HttpURLConnection登录到网站。
如果登录成功,则服务器在当前会话中设置user_id
变量。
通过使用SO和Google开发人员文档 ,我已经可以将我的凭据发布到服务器上,但是现在如何从会话中获取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());
注意:为了便于阅读,我省略了所有异常处理和资源管理。 而且,这只是连接到我的本地主机的试用代码,因此不必担心硬编码的凭据和其他不安全因素。
好吧,显然我的身体毕竟没有屈服。 当我在服务器代码中执行 console.log(util.inspect(req.body))
时,它将输出{}
。我仔细检查了请求方法,那就是POST。 我究竟做错了什么?
重新编写了代码,即使我认为我所做的工作与之前一样完全相同,现在也可以正常工作。 很奇怪,但是随便吧。
存储user_id
的会话保留在服务器上。 客户端通常获得的只是会话cookie中的会话ID(例如JSESSIONID),该ID会传递回服务器,以便服务器可以再次找到正确的会话和数据。
这就是为什么您还可以将大量数据放入用户会话中的原因……想象所有这些数据实际上已传递给客户端!
您不能,除非服务器中有一个合作的活动页面可以将其提供给您。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.