安卓应用常常遇到要保持用户登录状态的情况,这个时候就可以用session解决。客户端第一次访问服务器时,服务器端会自动给用户设置一个session值,这个值存在响应头的cookie中,客户端获取这个值后保存下来,再次访问服务器时把它添加到请求头中,服务器就能根据session的值识别用户的身份了。
用jsp写web应用的时候,session的处理非常简单,直接用session.setAttribute()设置session的属性,然后用session.getAttribute()获取已设置的属性;而前端网页则不需要考虑session的设置,有关session的操作都是自动完成的。这是因为一般的浏览器都支持cookie,会自动保存cookie并在下一次访问同一网站时把它提交过去。但是安卓端并没有自带这个“保存-提交”的功能,需要我们手动添加。
举一个简单的例子:
//服务器端jsp代码(test.jsp):
<%
String param = request.getParameter("param");
if (param == null) param = "";
if(session.isNew()){
session.setAttribute("param",param);
}
else {
out.print(session.getAttribute("param"));
}
%>
客户端第一次访问该页面时,服务器会设置session并添加属性“param”,再次访问时,则会根据用户的session把属性“param”的值打印出来。
以下是安卓客户端的代码:
String session;
//...
URL url = new URL("http://xxxxx?param=xxx");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setReadTimeout(5000);
//重点
session = conn.getHeaderField("set-cookie"); //在响应头中获取session
if (session != null){
session = session.substring(0,session.indexOf(";"));
}
else conn.addRequestProperty("Cookie",session); //在请求头里设置session
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuffer sb = new StringBuffer();
String str;
while((str = reader.readLine())!= null){
sb.append(str);
}
result = sb.toString();
System.out.println(result);