下面以一个简单的例子,说明Okhttp中保持Session的一种简单方法。其基本原理是先获取登录后服务器返回的sessionid,然后在http请求Header中加入包含sessionid的cookie,这样服务器就可以根据sessionid找到相应的Session,从而实现了服务器跟客户端处在同一Session中,也即保持了Session。
获取sessionid并保存到SharedPreferences:
Headers headers =response.headers(); //response为okhttp请求后的响应
List cookies = headers.values("Set-Cookie");
String session = cookies.get(0);
String sessionid = session.substring(0,session.indexOf(";"));
SharedPreferences share = getActivity().getSharedPreferences("Session",MODE_PRIVATE);
SharedPreferences.Editor edit = share.edit();//编辑文件
edit.putString("sessionid",sessionid);
edit.commit();
在随后的请求Header中加入包含sessionid的cookie:
//首先从SharedPreferences中获取sessionid
SharedPreferences share = getSharedPreferences("Session",MODE_PRIVATE);
String sessionid= share.getString("sessionid","null");
//重点:把sessionid加入到请求头
OkHttpClient okHttpClient = new OkHttpClient();
Request request =new Request.Builder().url(url).addHeader("cookie",sessionid).build();
try{
Response response = okHttpClient.newCall(request).execute();
}catch(IOException e) {
e.printStackTrace();
}
这样就简单的实现了okhttp保持Session的功能,如有错误欢迎留言指正,有疑惑也可加qq951268027一起交流学习。