android实现session保持hao

转载 2016年08月30日 22:55:44

在最近写的一个Android中需要请求web服务器中的数据,有一个登录Activity,登录后会到MainActivity,这中间登录和MainActivity都需要请求php的jsonapi,所以要在网络请求中保持session的,研究了好半天才搞定。其实sesion在浏览器和web服务器直接是通过一个叫做name为sessionid的cookie来传递的,所以只要在每次数据请求时保持sessionid是同一个不变就可以用到web的session了,做法是第一次数据请求时就获取sessionid的值并保存在一个静态变量中,然后在第二次请求数据的时候要将这个sessionid一并放在Cookie中发给服务器,服务器则是通过这个sessionid来识别究竟是那个客户端在请求数据的,在php中这个sessionid的名字叫做PHPSESSID。下面贴下代码

复制代码
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保持的问题了,只是这样可能会稍微大些网络流量开销而已。

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

Android客户端访问服务器保持SESSION会话的实现

大家在电脑上登录网上购物商城的时候购物,先进行登录,输入用户名密码,然后看到自己中意的商品就点开它的详情页面查看详细参数,然后决定买不买,在打开详情页面的时候,页面已经实现了跳转,那么第二个页面是服务...
  • yaochangliang159
  • yaochangliang159
  • 2015年12月30日 12:01
  • 9635

android实现session保持【以及web登陆保持】

对于登录功能本身没有任何特别,使用httpclient向服务器post用户名密码即可。 但是为了保持登录的状态(在各个Activity之间切换时要让网站知道用户一直是处于登录的状态)就需要进行coo...
  • nolouch
  • nolouch
  • 2014年07月07日 15:10
  • 2874

Android会话保持实现,包括webview会话保持,多个后端session的会话保持

一、概述这是我的第一篇博客,一直想写,但是不知道写些什么,主要是好多都可以百度到。最近遇到个比较麻烦的问题,麻烦不是因为难,而是不好排查问题,主要是这个知识点需要对后端开发有一定的了解,不然不好排查,...
  • u011457774
  • u011457774
  • 2017年12月26日 17:28
  • 331

Android 实现 session 保持

最近在开发项目的过程中,遇到 android 与 web 服务器要在同一 session 下通信的问题。先来了解一下 session 机制 和 session 的实现方式: Session机制 ...
  • CHITTY1993
  • CHITTY1993
  • 2016年04月10日 17:35
  • 3088

android学习笔记之客户端与服务端保持session登录状态

android新手入门,关于如何使用session保持用户登录状态,以及如何将服务端返回的JSONArray数据转换成List类型用于绑定显示到ListView中。...
  • qq12547345
  • qq12547345
  • 2015年08月21日 18:06
  • 3653

使用Volley实现session会话保持

使用volley很久了,关于volley处理网络请求,其确实封装简化了过程,然而有些功能还是本身不支持,需要自己扩展配置。比如本地保存服务端返回的cookie数据。volley中的Request类,代...
  • qq_16051379
  • qq_16051379
  • 2015年12月19日 14:25
  • 2641

android实现session保持

点击打开链接 android实现session保持   sesion在浏览器和web服务器直接是通过一个叫做name为sessionid的cookie来传递的,所以只要在...
  • lwj994615443
  • lwj994615443
  • 2013年11月08日 12:02
  • 544

Android实现Session保持

在最近写的一个Android中需要请求web服务器中的数据,有一个登录Activity,登录后会到MainActivity,这中间登录和MainActivity都需要请求php的jsonapi,所以要...
  • chen517611641
  • chen517611641
  • 2015年07月13日 19:29
  • 289

Tomcat(三) Tomcat安装配置:Tomcat+Nginx+keepalived 实现动静分离、Session会话保持的高可用集群

在前文了解到了Tomcat的配置及技术实现,而在Nginx系列文章中了解到了Nginx的配置,下面将在这些的基础上,先安装Tomcat,再进行配置Tomcat+Nginx+keepalived 的动静...
  • tjiyu
  • tjiyu
  • 2017年01月20日 22:09
  • 2572

XUtils框架之登录态持久化机制(session保留机制)

在我们平时使用应用程序时会发现一个问题,我使用应用程序时可能会接电话,或者去切出去看微信等,等在进入应用程序时,程序已经被系统杀掉。如果要继续使用应用程序需要重新登录。这样频繁反复登录会使用户极度烦躁...
  • Terry_722
  • Terry_722
  • 2016年04月08日 16:33
  • 2226
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android实现session保持hao
举报原因:
原因补充:

(最多只允许输入30个字)