android 客户端 保持session 连接

来源:互联网 发布:炉石传说当地网络 编辑:程序博客网 时间:2024/04/28 15:12
import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.List;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.NameValuePair;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.CookieStore;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpPost;import org.apache.http.cookie.Cookie;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.protocol.HTTP;import org.apache.http.util.EntityUtils;public class MyHttpClient implements InetConfig {    private DefaultHttpClient httpClient;    private HttpPost httpPost;    private HttpEntity httpEntity;    private HttpResponse httpResponse;    public static String PHPSESSID = null;    public LVHttpClient() {    }    public String executeRequest(String path, List<NameValuePair> params) {        String ret = "none";        try {            this.httpPost = new HttpPost(BASEPATH + path);            httpEntity = new UrlEncodedFormEntity(params, HTTP.UTF_8);            httpPost.setEntity(httpEntity);            //第一次一般是还未被赋值,若有值则将SessionId发给服务器            if(null != PHPSESSID){                httpPost.setHeader("Cookie", "PHPSESSID=" + PHPSESSID);            }                        httpClient = new DefaultHttpClient();        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        }        try {            httpResponse = httpClient.execute(httpPost);            if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {                HttpEntity entity = httpResponse.getEntity();                ret = EntityUtils.toString(entity);                CookieStore mCookieStore = httpClient.getCookieStore();                List<Cookie> cookies = mCookieStore.getCookies();                for (int i = 0; i < cookies.size(); i++) {                    //这里是读取Cookie['PHPSESSID']的值存在静态变量中,保证每次都是同一个值                    if ("PHPSESSID".equals(cookies.get(i).getName())) {                        PHPSESSID = cookies.get(i).getValue();                        break;                    }                }            }        } catch (ClientProtocolException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }        return ret;    }}

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

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

0 0
原创粉丝点击