`

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用HttpUrlConnection与web服务器之间session保持问题

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

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

    本篇文章将深入探讨如何在Android应用中集成SSH客户端,实现登录并保持SESSION来访问服务端数据。 首先,我们要了解SSH框架的选择。在Android中,我们可以使用JSch库,这是一个Java实现的SSH2库,可以实现SFTP、SCP...

    android 实现 ssh功能

    在Android平台上实现SSH(Secure Shell)功能,可以让用户通过安全的网络协议远程访问和控制设备。SSH是一种网络协议,主要用于安全地执行命令行操作、传输文件等,它使用加密技术确保数据传输的安全性。以下是对...

    Android实现后台连续静默拍照(无预览 不闪退)

    本教程将围绕"Android实现后台连续静默拍照(无预览 不闪退)"这一主题展开,讲解如何编写这样的应用。 首先,我们需要了解Android的相机服务(Camera Service)。在Android中,我们通过Camera API与相机硬件进行...

    android实现自动登录

    以下是对"android实现自动登录"这一主题的详细讲解。 首先,我们需要了解自动登录的基本原理。当用户成功登录后,服务器通常会返回一个会话标识(Session ID)或者令牌(Token),用于后续请求的验证。为了实现自动...

    Android简单播放器实现,带轮播图

    这个项目名为"Android简单播放器实现,带轮播图",旨在提供一个用户友好的音乐播放体验,同时通过轮播图展示多张图片,每张图片对应不同的音乐列表。下面将详细介绍实现这个功能所需的关键知识点: **1. Android...

    Android sip 实现视频通话

    在Android平台上实现SIP(Session Initiation Protocol)视频通话是一项技术含量较高的任务,涉及到网络通信、多媒体处理以及用户界面设计等多个方面。SIP是一种应用层的控制协议,用于创建、修改和终止多媒体通信...

    android获取web服务器端session并验证登陆[借鉴].pdf

    本话题主要讨论如何在Android应用中获取并使用Web服务器端的Session来实现用户登录验证。Web服务器通常使用Session来跟踪用户的登录状态,而Android客户端需要适当地处理Session ID的传递,以保持会话的有效性。 ...

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

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

    android与asp.net服务端共享session的方法详解

    以下是如何在Android客户端和ASP.NET服务端实现Session共享的详细步骤: 1. **获取Session ID**: 当Android客户端首次与ASP.NET服务端交互时,通常通过HTTP请求发送登录信息。在ASP.NET服务端验证成功后,服务端...

    WenRTC的android实现

    在“WenRTC的Android实现”这个主题中,我们将深入探讨如何在Android平台上运用WebRTC技术构建实时通信应用。 1. **WebRTC架构** WebRTC由多个组件构成,包括对等连接(PeerConnection)、信令(Signaling)、媒体...

    Android应用源码之sipdroid语音及视频通话-IT计算机-毕业设计.zip

    本项目“Android应用源码之sipdroid语音及视频通话”是一个基于Android的开源应用程序,它为开发者提供了实现VoIP(Voice over Internet Protocol)服务的示例,即通过互联网进行语音和视频通信。这个项目对于那些...

    Android Volly 和PHP服务端通信(包含Cookie和Session),FinalDB数据库使用

    在Android端,需要确保每次请求都携带正确的Session ID,以保持会话的连续性。 2. **PHP服务端的实现**: - 创建Session:在PHP中,`session_start()`函数用于开启或恢复一个会话。可以使用`$_SESSION`数组存储...

    Android单点登录,互踢下线代码实现

    本文将详细探讨如何在Android平台上实现单点登录,特别是实现互踢下线功能。 首先,我们需要理解单点登录的工作原理。在Android环境中,SSO通常通过共享存储(如SharedPreferences、数据库或网络服务)来实现。当...

    AyncHttpClient 实例,可保持session

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

    Android用HttpConnection访问网络时实现类似浏览器自动保持上一次会话的功能

    在Android应用开发中,使用HttpURLConnection访问网络时,有时候我们需要实现类似浏览器的自动保持会话功能,以便在用户登录后,后续的网络请求能够自动携带上登录状态,无需每次都重新登录。这种功能在处理需要持久...

    AndroidHttpSession

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

    SharePreference类似于JavaEE中的session

    总结起来,SharePreferences是Android开发中存储轻量级偏好设置的重要工具,而JavaEE的session则是Web应用中实现会话跟踪的核心机制。理解并熟练掌握这两种技术,对于进行Android和JavaEE开发至关重要。通过阅读博文...

Global site tag (gtag.js) - Google Analytics