`

Android HttpClient Session保持

阅读更多

现在单机版本的App已经不多了,基本上都会和服务器进行通信。Android提供Http访问的方式有两种,一种是HttpClient,一种是UrlConnection.这里要说的是HttpClient。

在Http访问中,我们可能会遇到一些这样的场景,比如服务端要求几次Http请求组成一次完整的客户端服务器通信,比如同步。现在的App很多有有账号系统,会提供把用户数据备份的功能,那么这么在线备份功能就是这样的一个场景,它包括登陆、数据上传,结果返回、提交确认或者终止等这样的顺序步骤,每一步都是一次Http访问请求。服务器的设计(负载均衡等)需要要求客户端在这依次完整的数据备份的几次Http访问请求中保持同一个Session.便于服务器的协调和操作,就和用户用浏览器打开网页去完整一件事情一样,这就需要我们在每次Http请求的时候保持Session。

其实保持HttpClient的请求Session,就是保证在每次Http请求访问的请求头信息的Cookie参数中,携带同一个JSESSIONID,只要保证每次是一样的,服务器就认为是同一Session,这就保持了Seesion会话。那么这个JSESSIONID是怎么来的呢,是服务器通过响应头信息给的,服务器在给客户端设置Cookie时,会通过响应头信息中的Set-Cookie参数传递回来,只要有新设置的Cookie,就是通过这个传递过来,如果没有则是null,那么我们就可以在请求完之后返回的信息里读取这个Set-Cookie头信息,然后保存起来,在下次请求的时候给服务器发送过去,就实现了保持Seesion的目的。代码如下:

 

//定义储存Cookie信息
    private String cookies;

    public void executeGet(String url) throws ClientProtocolException, IOException{
        HttpClient httpClient=new DefaultHttpClient();

        HttpGet httpGet=new HttpGet(url);
        setRequestCookies(httpGet);

        HttpResponse response=httpClient.execute(httpGet);
        appendCookies(response);
    }
    /**
     * 设置请求的Cookie头信息
     * @param reqMsg
     */
    private void setRequestCookies(HttpMessage reqMsg) {
        if(!TextUtils.isEmpty(cookies)){
            reqMsg.setHeader("Cookie", cookies);
        }
    }
    /**
     * 把新的Cookie头信息附加到旧的Cookie后面
     * 用于下次Http请求发送
     * @param resMsg
     */
    private void appendCookies(HttpMessage resMsg) {
        Header setCookieHeader=resMsg.getFirstHeader("Set-Cookie");
        if (setCookieHeader != null
                && TextUtils.isEmpty(setCookieHeader.getValue())) {
            String setCookie=setCookieHeader.getValue();
            if(TextUtils.isEmpty(cookies)){
                cookies=setCookie;
            }else{
                cookies=cookies+"; "+setCookie;
            }
        }
    }

 

上面的代码就是一个简单的例子,我们在发送我们的请求之前,把现存的Cookie通过请求头信息发送给服务器,然后再服务器返回的头信息中解析,看是否有需要的更新的Cookie即可,这样我们就达到了保持Seession目的。

当我们需要重新设置Seesion的时候,请求我们保存的cookie即可,这样代码就会重新获取。如果都有个账号并发备份,那么一个账号分配一个cookie变量存储即可,也就是把上面的代码放到一个如HttpManager管理的类里,每个账号的备份都可以new个HttpManager实例,这样每个账号都可以单独处理自己的Cookie,互不干扰。

 

分享到:
评论

相关推荐

    彻底解决android用HttpUrlConnection与web服务器之间session保持问题

    总之,解决Android与Web服务器之间的session保持问题,关键是理解Cookie和Session的工作原理,以及在Android中如何正确处理它们。通过手动设置请求头中的Cookie,或者使用支持自动处理Cookie的库,可以有效地实现...

    android获取web服务器端session并验证登陆实用.pdf

    "android获取web服务器端session并验证登陆实用.pdf"这篇文档探讨的就是如何在Android应用中实现这一功能,尤其是在处理服务器端的session保持方面。以下是相关知识点的详细说明: 1. **Web服务器端的Session**: ...

    安卓使用httpClient实现网络请求并通过cookie维持对话

    当用户成功登录后,服务器通常会返回一个Session ID或类似的标识符,以保持会话。HttpClient会自动管理这些Cookie,只要保持HttpClient实例不被销毁,就可以在后续请求中继续使用。 8. **注意点** - 尽管...

    AndroidHttpSession

    `AndroidHttpSession`这个实例主要关注的是如何在Android应用中利用HttpURLConnection实现会话(Session)保持,以处理登录状态和验证码获取等问题。下面我们将深入探讨相关知识点。 1. **HttpURLConnection**: ...

    android cookie获取和设置,webView的cookie的同步

    特别是在使用 HttpClient 发起网络请求时,保持客户端与服务器端 Session 的一致性是非常重要的。此外,在 WebView 中进行 Cookie 的同步也是实现持久化登录等场景的关键技术之一。 #### 一、HttpClient 请求中的 ...

    网络通信(2HttpClient

    HttpClient扩展了Java标准库中的HttpURLConnection,不仅支持GET和POST请求,还能处理Session、Cookie等复杂场景。 ### 1. HttpClient简介 HttpClient是Apache Commons的一个组件,它为开发者提供了发送HTTP请求和...

    AyncHttpClient 实例,可保持session

    AsyncHttpClient 是一个...通过以上步骤,你可以在Android应用中使用AsyncHttpClient实现异步HTTP请求,并保持session状态。这有助于创建一个高效且用户友好的网络应用,能够在不同请求间保持用户会话,提高用户体验。

    android客户端发送https请求

    HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true); ``` 若使用Apache HttpClient库,可以设置HttpClient的Connection Manager: ```java SchemeRegistry schemeRegistry = new ...

    爬虫 登陆 知乎 android java

    在这个项目中,我们需要构建一个能够登录知乎的爬虫,因此需要理解HTTP协议、Cookie管理以及会话保持。 2. **登录机制**:知乎的登录通常涉及到Cookie和Session。Cookie是服务器发送到用户浏览器并存储的一小块数据...

    android登陆验证

    标题“android登陆验证”涉及的知识点主要集中在Android应用如何通过网络与Web服务器交互,获取并使用session来实现用户登录验证的机制。 描述中提到的“安卓获取web服务器端session并验证登陆”暗示了这个过程涉及...

    android登录验证程序

    登录成功后,Android应用通常会保存用户的登录状态,这可以通过使用SharedPreferences存储登录凭证,或者在服务器端设置session来实现。这样,用户在一段时间内再次打开应用时,可以直接进入已登录状态,无需重新...

    android webdav工具类

    这个工具类通常会使用Apache的 HttpClient 或者OkHttp库来实现对WebDAV服务器的通信。 3. **Jackrabbit**: Jackrabbit是Apache基金会的一个开源项目,它提供了一个全面的Java Content Repository (JCR) 实现,也...

    android登录程序

    此外,登录验证成功后,通常会使用Session或者Token来保持用户状态,而不是直接将用户信息存储在客户端。 文件"Login_sj"可能包含了整个登录系统的源代码,包括Android客户端的`HttpClient`请求实现和服务器端的`...

    Android调用Web应用浅析.pdf

    HttpClient提供了一种更为高效的方式处理会话(Session)和Cookie。HttpPost和HttpGet类分别封装了POST和GET请求,通过HttpClient的`execute()`方法发送请求,并通过HttpResponse获取响应数据,包括响应头和实体内容...

    精品(2021-2022年)资料达内Android全真模块实训.docx

    - **Session和Cookie的使用**:Session用于跟踪用户的会话状态,Cookie用于存储少量信息。 - **JSP的基本语法**:如、等标签。 - **JSP标签库**:如JSTL等扩展标签。 - **JSP编程技巧和经典设计模式**:如MVC模式的...

    android 学习路线大纲

    【Android 学习路线大纲】 对于初学者而言,掌握Android开发需要系统地学习一系列相关知识。以下是一个适合有一定Java和...同时,随着技术的不断更新,及时关注Android新特性和最佳实践也是保持竞争力的关键。

    【Android】用户登录注册界面开发及用户信息管理案例代码详解

    可以使用Android的HttpClient库或者更现代的Retrofit库来处理网络请求。登录时,应用会将用户输入的用户名和密码发送到服务器进行验证。如果验证成功,服务器返回一个令牌(Token)或其他认证信息,应用将其保存,...

    Android客户端与服务器数据交互流程样本.doc

    8. **状态管理**:为了跟踪用户的登录状态和个性化信息,Android客户端可能需要保存服务器返回的Token或Session ID,并在后续请求中携带,以维持会话状态。 9. **错误处理**:网络请求可能会遇到各种问题,如网络...

    Android 爬取学校内网数据.zip

    Android提供了多种方式来实现网络通信,如HttpURLConnection、HttpClient、Volley、Retrofit等。在这个项目中,开发者选择了Jsoup,因为它是处理HTML文档的强大工具,特别适合抓取和解析网页内容。 二、Jsoup库介绍...

    保持登录session访问网页案例

    最近做android模拟登陆,登陆成功后才有权限进行...于是就找了几种保持登录session 访问网页的方法,分享一下,不喜勿喷! 一、利用安卓自带的httpclient。 详细说明:http://android.662p.com/thread-5637-1-1.html

Global site tag (gtag.js) - Google Analytics