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

前言

最近因为工作的需要,要实现一个功能,就是需要通过发送短信进行注册,现在想把短信验证码放到服务器的session值中,当客户端收到短信并提交短信码时由asp.net服务端进行判断,那么如何共享这个session那么需要在android客户端中添加几行代码。

实现方法

如下操作。第一次数据请求时就获取这个cookie的名称并且得到这个cookie的值,这个即是sessionid的值并保存在一个静态变量中,然后在第二次请求数据的时候要将这个sessionid一并放在Cookie中发给服务器,服务器则是通过这个sessionid来识别究竟是那个客户端在请求数据的,在asp.net中这个sessionid的名字叫做ASP.NET_SessionId,当然我们可以从程序中获取。

如下代码:

//获取服务端的这个sessionid的名称 /* 获取cookieStore */ List<Cookie> cookies = cookieStore.getCookies(); for(int i=0;i<cookies.size();i++){ String sessionid = cookies.get(i).getName(); 从这里可以获取到这个sessionid,即为 ASP.NET_SessionId }

获取sessionid的值

for(int i=0;i<cookies.size();i++){ if("ASP.NET_SessionId".equals(cookies.get(i).getName())){   JSESSIONID = cookies.get(i).getValue(); //这个即为sessionid的值   break; } }

完整的httputils代码如下:

public static DefaultHttpClient httpClient = null; private static String JSESSIONID; //定义一个静态的字段,保存sessionID public static String getRequest(String url) { httpClient = new DefaultHttpClient(); HttpGet get = new HttpGet(url); try { HttpParams params = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(params, 10000);//设置连接超时 HttpConnectionParams.setSoTimeout(params, 15000);//设置请求超时 get.setParams(params); get.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); if(null != JSESSIONID){ get.setHeader("Cookie", "ASP.NET_SessionId="+JSESSIONID); } //连接响应,通过HttpResponse获得响应信息 HttpResponse httpResponse = httpClient.execute(get); if(httpResponse.getStatusLine().getStatusCode() == 200) { //取得响应字符串 String result = EntityUtils.toString(httpResponse.getEntity()); return result; } } catch (ClientProtocolException e) { return null; } catch (IOException e) { return null; } return null; } public static String postRequest(String url, HashMap<String, String> rawParams) throws Exception { httpClient = new DefaultHttpClient(); //创建POST请求方式 HttpPost post = new HttpPost(url); HttpParams cparams = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(cparams, 10000);//设置连接超时 HttpConnectionParams.setSoTimeout(cparams, 15000);//设置请求超时 post.setParams(cparams); post.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); if(null != JSESSIONID){ post.setHeader("Cookie", "ASP.NET_SessionId="+JSESSIONID); } //使用NameValuePair来保存要传递的参数,可以使用BasicNameValuePair来构造一个要被传递的参数 //通过add添加这个参数到NameValuePair中 ArrayList<NameValuePair> params = new ArrayList<NameValuePair>(); for(String key : rawParams.keySet()) { //添加要传传递的参数 params.add(new BasicNameValuePair(key, rawParams.get(key))); } //post需要为参数设置字符集 HttpEntity httpEntity = new UrlEncodedFormEntity(params, HTTP.UTF_8); //请求httpRequest post.setEntity(httpEntity); //发送POST请求并获取响应 HttpResponse httpResponse = null; try { httpResponse = httpClient.execute(post); } catch(Exception ex) { String ee = ex.getMessage(); } if(httpResponse.getStatusLine().getStatusCode() == 200) { String result = EntityUtils.toString(httpResponse.getEntity(), HTTP.UTF_8); /* 获取cookieStore         ASP.NET_SessionId就是通过上面的方法获取到。       */ CookieStore cookieStore = httpClient.getCookieStore(); List<Cookie> cookies = cookieStore.getCookies(); for(int i=0;i<cookies.size();i++){ if("ASP.NET_SessionId".equals(cookies.get(i).getName())){ JSESSIONID = cookies.get(i).getValue(); break; } } return result; } return null; }

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

时间: 2024-11-02 23:33:11

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

WCF服务端运行时架构体系详解[下篇]

作为WCF中一个核心概念,终结点在不同的语境中实际上指代不同的对象.站在服务描述的角度,我们所说的终结点实际上是指ServiceEndpoint对象.如果站在WCF服务端运行时框架来说,终结点实际上指代的是终结点分发器(EndpointDispatcher).而ServiceEndpoint与EndpointDispatcher是一一匹配的,并且前者是创建后者的基础.而终结点分发器具有自己的运行,即分发运行时(DispatchRuntime). 目录 一.终结点分发器(EndpointDispa

WCF服务端运行时架构体系详解[上篇]

WCF的服务端架构体系又可以成为服务寄宿端架构体系.我们知道,对于一个基于某种类型的服务进行寄宿只需要使用到一个唯一的对象,那就是ServiceHost.甚至在某种语境下,我们所说的服务实际上就是指的对应的ServiceHost对象.整个服务寄宿过程包括两个阶段,即服务描述的创建和服务端运行框架的建立.而第一个阶段创建的服务描述是为了第二个阶段对服务端运行时框架建立服务的,所以我们有必要在对服务描述进行简单的介绍. 目录: 一.从服务描述(Service Description)谈起 二.服务端

WCF服务端运行时架构体系详解[续篇]

终结点分发器在自己的运行时中对请求消息的处理最终肯定体现在相应操作的执行.如果从服务描述的角度来看,操作是一个OperationDescription对象.而服务端分发运行时中的操作则代表的是一个DispatchOperation对象.作为服务描述的一部分,服务所有终结点的所有操作描述(OperationDescription)在ServiceHost创建过程中被创建.而当ServiceHost被正常开始时,这些操作描述最终转换成分发操作(DispatchOperation).而Dispatch

WCF服务端运行时架构体系详解[中篇]

在这篇文章中,我们对信道分发器本身作一个深入的了解,首先来看看它具有哪些可供扩展的组件,以及我们可以针对信道分发器对WCF实现哪些可能的扩展. 目录: ErrorHandler & ServiceThrottle ChannelInitializer IncludeExceptionDetailInFaults ManualAddressing MaxPendingReceives ReceiveSynchronously IsTransactedReceive & MaxTransact

ASP.NET动态设置页面标题的方法详解

这篇文章介绍了ASP.NET动态设置页面标题的方法详解,有需要的朋友可以参考一下     ASP.NET为我们提供了一个控件类:System.Web.UI.HtmlControls.HtmlGenericControl.它可以实现 HTML的元素的一个实例,比如在.cs代码中控制aspx中的<td>元素(注意,它不是<ASP:TableCell>). 我们知道,页面标题是被包含在<TITLE></TITLE>中的,而<TITLE>也是一个HTML

Android中用Bmob实现短信验证码功能的方法详解_Android

 这篇文章主要介绍发送验证码和校验验证码的功能,用到一个第三方平台Bmob,那Bmob是什么呢?Bmob可以开发一个云存储的移动应用软件,他提供了大量的标准的API接口,根据需要接入相关服务,开发者可以更加专注于应用的开发,让产品交付更快速,验证码功能就是其中一个. 一.跟其他第三方一样,我们开发之前要做一些准备工作. 1.首先,去官网注册一个帐号:http://www.bmob.cn/: 2.然后就可以创建应用了:具体怎么做Bmob说得很清楚了(官方操作介绍),如果你不想看,我简单说一下:点击

Android通过json向MySQL中读写数据的方法详解【读取篇】_Android

本文实例讲述了Android通过json向MySQL中读取数据的方法.分享给大家供大家参考,具体如下: 首先 要定义几个解析json的方法parseJsonMulti,代码如下: private void parseJsonMulti(String strResult) { try { Log.v("strResult11","strResult11="+strResult); int index=strResult.indexOf("[");

Android通过json向MySQL中读写数据的方法详解【写入篇】_Android

本文实例讲述了Android通过json向MySQL中写入数据的方法.分享给大家供大家参考,具体如下: 先说一下如何通过json将Android程序中的数据上传到MySQL中: 首先定义一个类JSONParser.Java类,将json上传数据的方法封装好,可以直接在主程序中调用该类,代码如下 public class JSONParser { static InputStream is = null; static JSONObject jObj = null; static String j

Android通过json向MySQL中读写数据的方法详解【读取篇】

本文实例讲述了Android通过json向MySQL中读取数据的方法.分享给大家供大家参考,具体如下: 首先 要定义几个解析json的方法parseJsonMulti,代码如下: private void parseJsonMulti(String strResult) { try { Log.v("strResult11","strResult11="+strResult); int index=strResult.indexOf("[");