原文:http://blog.csdn.net/edward_qing_lee/article/details/15178451

sesion在浏览器和web服务器直接是通过一个叫做name为sessionid的cookie来传递的,所以只要在每次数据请求时保持 sessionid是同一个不变就可以用到web的session了,做法是第一次数据请求时就获取sessionid的值并保存在一个静态变量中,然后 在第二次请求数据的时候要将这个sessionid一并放在Cookie中发给服务器,服务器则是通过这个sessionid来识别究竟是那个客户端在请 求数据的,在php中这个sessionid的名字叫做PHPSESSID。下面贴下代码

[java] view plain copy
  1. importjava.io.IOException;
  2. importjava.io.UnsupportedEncodingException;
  3. importjava.util.List;
  4. importorg.apache.http.HttpEntity;
  5. importorg.apache.http.HttpResponse;
  6. importorg.apache.http.HttpStatus;
  7. importorg.apache.http.NameValuePair;
  8. importorg.apache.http.client.ClientProtocolException;
  9. importorg.apache.http.client.CookieStore;
  10. importorg.apache.http.client.entity.UrlEncodedFormEntity;
  11. importorg.apache.http.client.methods.HttpPost;
  12. importorg.apache.http.cookie.Cookie;
  13. importorg.apache.http.impl.client.DefaultHttpClient;
  14. importorg.apache.http.protocol.HTTP;
  15. importorg.apache.http.util.EntityUtils;
  16. publicclassMyHttpClientimplementsInetConfig{
  17. privateDefaultHttpClienthttpClient;
  18. privateHttpPosthttpPost;
  19. privateHttpEntityhttpEntity;
  20. privateHttpResponsehttpResponse;
  21. publicstaticStringPHPSESSID=null;
  22. publicLVHttpClient(){
  23. }
  24. publicStringexecuteRequest(Stringpath,List<NameValuePair>params){
  25. Stringret="none";
  26. try{
  27. this.httpPost=newHttpPost(BASEPATH+path);
  28. httpEntity=newUrlEncodedFormEntity(params,HTTP.UTF_8);
  29. httpPost.setEntity(httpEntity);
  30. //第一次一般是还未被赋值,若有值则将SessionId发给服务器
  31. if(null!=PHPSESSID){
  32. httpPost.setHeader("Cookie","PHPSESSID="+PHPSESSID);
  33. }
  34. httpClient=newDefaultHttpClient();
  35. }catch(UnsupportedEncodingExceptione){
  36. e.printStackTrace();
  37. }
  38. try{
  39. httpResponse=httpClient.execute(httpPost);
  40. if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
  41. HttpEntityentity=httpResponse.getEntity();
  42. ret=EntityUtils.toString(entity);
  43. CookieStoremCookieStore=httpClient.getCookieStore();
  44. List<Cookie>cookies=mCookieStore.getCookies();
  45. for(inti=0;i<cookies.size();i++){
  46. //这里是读取Cookie['PHPSESSID']的值存在静态变量中,保证每次都是同一个值
  47. if("PHPSESSID".equals(cookies.get(i).getName())){
  48. PHPSESSID=cookies.get(i).getValue();
  49. break;
  50. }
  51. }
  52. }
  53. }catch(ClientProtocolExceptione){
  54. e.printStackTrace();
  55. }catch(IOExceptione){
  56. e.printStackTrace();
  57. }
  58. returnret;
  59. }
  60. }


其实web的原理都是一样的,基于http协议的,那么如果网站不是php做的话,那个叫做Sessionid的Cookie可能叫做别的了,就不是PHPSESSID了,而是叫做别的名字了,这个可能要具体情况去查了。

其实不只是Android程序,其他任何程序需要这么用的时候只需要在http协议请求header里头加上发送相应的SessionId就可以 了。刚刚这种方法是可以帮助理解sessionid的,其实还有一种方法如果更通用的话,就可以将刚刚所有的Cookie每次都发回到服务器端,也就可以 解决session保持的问题了,只是这样可能会稍微大些网络流量开销而已。

这里看到一个SessionId的本质,顺便mark一下。

转自:http://www.cnblogs.com/dumuqiao/archive/2012/03/19/2405430.html

更多相关文章

  1. 一句话锁定MySQL数据占用元凶
  2. Android(安卓)Activity间跳转与传递数据
  3. Android(安卓)day_09-02 (Activity 短信发送器案例)
  4. 安卓四大组件之——ContentProvider学习
  5. android 数据存储——SharedPreferences,有代码实现,简单易懂
  6. Android之Banner的滚动轮播实现
  7. ViewModels 和 LiveData:模式 +反模式
  8. Android客户端与服务器端通过DES加密认证
  9. Android(安卓)OkHttp简单封装

随机推荐

  1. android抓包流程
  2. Android 中用Intent提取缩略图和原始图像
  3. 解决listView挡住button的问题
  4. Android 的一个错误的解决
  5. Android(安卓)BaseAdapter与ListView的使
  6. 【从头学android】第二个程序同一个Activ
  7. Android -- Wifi的save()操作
  8. android Vibrator震动效果
  9. Android UI列表的上拉下拉刷新之Android-
  10. Android利用Timer实现倒计时效果小demo