`

android实现session保持

 
阅读更多

原文: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。下面贴下代码

  1. import java.io.IOException;  
  2. import java.io.UnsupportedEncodingException;  
  3. import java.util.List;  
  4.   
  5. import org.apache.http.HttpEntity;  
  6. import org.apache.http.HttpResponse;  
  7. import org.apache.http.HttpStatus;  
  8. import org.apache.http.NameValuePair;  
  9. import org.apache.http.client.ClientProtocolException;  
  10. import org.apache.http.client.CookieStore;  
  11. import org.apache.http.client.entity.UrlEncodedFormEntity;  
  12. import org.apache.http.client.methods.HttpPost;  
  13. import org.apache.http.cookie.Cookie;  
  14. import org.apache.http.impl.client.DefaultHttpClient;  
  15. import org.apache.http.protocol.HTTP;  
  16. import org.apache.http.util.EntityUtils;  
  17.   
  18. public class MyHttpClient implements InetConfig {  
  19.     private DefaultHttpClient httpClient;  
  20.     private HttpPost httpPost;  
  21.     private HttpEntity httpEntity;  
  22.     private HttpResponse httpResponse;  
  23.     public static String PHPSESSID = null;  
  24.     public LVHttpClient() {  
  25.   
  26.     }  
  27.   
  28.     public String executeRequest(String path, List<NameValuePair> params) {  
  29.         String ret = "none";  
  30.         try {  
  31.             this.httpPost = new HttpPost(BASEPATH + path);  
  32.             httpEntity = new UrlEncodedFormEntity(params, HTTP.UTF_8);  
  33.             httpPost.setEntity(httpEntity);  
  34.             //第一次一般是还未被赋值,若有值则将SessionId发给服务器  
  35.             if(null != PHPSESSID){  
  36.                 httpPost.setHeader("Cookie""PHPSESSID=" + PHPSESSID);  
  37.             }              
  38.             httpClient = new DefaultHttpClient();  
  39.         } catch (UnsupportedEncodingException e) {  
  40.             e.printStackTrace();  
  41.         }  
  42.         try {  
  43.             httpResponse = httpClient.execute(httpPost);  
  44.             if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {  
  45.                 HttpEntity entity = httpResponse.getEntity();  
  46.                 ret = EntityUtils.toString(entity);  
  47.                 CookieStore mCookieStore = httpClient.getCookieStore();  
  48.                 List<Cookie> cookies = mCookieStore.getCookies();  
  49.                 for (int i = 0; i < cookies.size(); i++) {  
  50.                     //这里是读取Cookie['PHPSESSID']的值存在静态变量中,保证每次都是同一个值  
  51.                     if ("PHPSESSID".equals(cookies.get(i).getName())) {  
  52.                         PHPSESSID = cookies.get(i).getValue();  
  53.                         break;  
  54.                     }  
  55.   
  56.                 }  
  57.             }  
  58.         } catch (ClientProtocolException e) {  
  59.             e.printStackTrace();  
  60.         } catch (IOException e) {  
  61.             e.printStackTrace();  
  62.         }  
  63.   
  64.         return ret;  
  65.     }  
  66. }  


 

其实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

分享到:
评论

相关推荐

    android实现session保持简要概述及实现

    在最近写的一个Android中需要请求web服务器中的数据,有一个登录Activity,登录后会到MainActivity,这中间登录和MainActivity都需要请求php的jsonapi,所以要在网络请求中保持session的,研究了好半天才搞定。...

    android 集合SSH客户端实现登录,并保持session访问服务端数据

    安卓客户端集合SSH框架,实现登录并保持session操作服务端数据与服务端交互

    Async:android的http异步框架,使用接口回调,实现了cookie持久化,保持session一致

    使用接口回调,实现了cookie持久化,保持session一致 1. 入口 com.example.async.MainActivity.java 2. 包结构 2.1 用户界面包 com.example.async |—— MainActivity 入口文件 |—— PlaceholderFragment 用法测试...

    AndroidHttpSession

    实现了HttpUrlConnetion在获取验证码后保持Session登陆的一个实例.更多好看的博客请访问我的博客:http://blog.sina.com.cn/u/2622426745

    纯JSP演示Cookie自动登录(完整工程)

    纯JSP演示Cookie自动登录(完整工程。主要实现勾选自动登录后, 哪怕服务器重启后session丢失,靠客户端COOKIE仍然正常登录并刷新COOKIE。...现为WEB,可改造为提供android 和ios下的httpclient保持长久登录状态的方式。

    java开源包3

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包4

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    JAVA上百实例源码以及开源项目

    两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将...

    JAVA上百实例源码以及开源项目源代码

    Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用...

    java开源包1

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包11

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包2

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包6

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包5

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包10

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包8

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包7

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包9

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

Global site tag (gtag.js) - Google Analytics