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-10-15 13:53:42

android如何与asp.net服务端共享session的相关文章

Asp.Net服务端的基本控件

今天开始把最基础的Asp.Net服务端基本控件学习巩固了一下 1.Asp.Net服务端控件是Asp.Net对HTML的封装,在C#代码中就可以用txt1.Text="指定值"这种方式修改 input的值,Asp.Net会将服务端控件渲染成HTML代码输出给浏览器,服务端控件是Asp.Net非常容易上手,也非常吸引初学者,但也是被人诟病的东西.因为它会传输很多无法的东西,如viewstate. 服务端控件在内网或互联网系统的后台部分等访问频率不高的地方还是很适合的. 服务端控件只能用po

Android应用性能测试(客户端-服务端)平台实现

Android应用性能测试(客户端-服务端)平台实现 东海陈光剑 2014年5月23日 2:01:05 开源项目代码: https://github.com/universsky/EmmageePlus (基于Emmagee) https://github.com/universsky/EmmageePlus/blob/master/src/com/netease/qa/emmagee/service/EmmageeService.java /* * Copyright (c) 2012-201

Socket Android手机客户端与PC服务端局域网内联测试

Socket Android手机客户端与PC服务端局域网内联测试,笔者采用的是 PC服务器,Android平板客户端 ,PC模拟器客户端, 前段时间为了加深对Socket通信的印象和知识的深度掌握,我模仿了QQ的一些元素,也借鉴了其他牛人的一些源码思想,写了 一个 叫 IQ 的 Android 聊天软件,该软件大致由 Android客户端.JAVA pc服务端.mysql数据库组成,客户端和服务端都 比较多的用到了读写的IO流,SCOKET,线程等,这篇博客主要给大家介绍测试环境,不讲源码实现方

Android ListView分页载入(服务端+android端)Demo

Android ListView分页载入功能 在实际开发中经经常使用到,是每一个开发人员必须掌握的内容,本Demo给出了服务端+Android端的两者的代码,并成功通过了測试. 服务端使用MyEclipse,Android端使用Eclipse. 实现效果图: 服务端一共100条数据,共分四页,每页有25条数据. 源码: 服务端: 须要导入图中这几个jar包. 在执行Android端代码前,须要开启服务端: 以下先给出服务端的代码: 类EmpDataSource: package com.andr

android 38 Abdroid客户端和服务端交互

服务端: package com.sxt.day05; import java.io.IOException; import java.util.ArrayList; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest

如何通过JavaScript构建Asp.net服务端控件

摘要 虽然ASP.NET的服务器控件一直被大家所诟病,但是用户控件(ACSX)在某些场景下还是非常有用的. 在一些极特珠的情况下,我们会使用JavaScript动态的构建页面中的控件,但假设遇到了我要用JavaScript构建一个服务端控件.用户控件时,该怎么办? 我们常常说,服务端控件运行在服端器上,那么这话是什么意思呢? 服务端控件,其本质是一构建HTML语句的封装,以事先编排好的方式,生成一套HTML并通过Http协议返回给客户端.因此,我们所写的服务端控件,在响应HTTP请求时,早已不存

ASP.NET服务端控制页面弹窗

在做图书馆管理系统的时候添加图书或者读者的时候,当添加成功了,要给用户一个反馈.就想到了添加成功就弹窗告诉读者添加成功.但是我们写的是服务端的代码,如何控制客户端弹窗呢?下面就要充分利用提高班的优势,搜索. 上网一搜,就会有一大堆这样的博客.我只用到了其中的两种,因为要经常用到,所以对他们进行了封装. 第一种,这种方式弹窗方式不会屏蔽掉页面,就是还可以看到页面后面的内容.这块用于对用户的反馈比较好. <span style="font-size:18px;"> /// &l

Android 客户端Socket 与 Java服务端ServerSocket 简单小例子

新建一个Java项目 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public

ASP.NET 服务端接收Multipart/form-data文件

在网络编程过程中需要向服务器上传文件. Multipart/form-data是上传文件的一种方式. 1 /// <summary> 2 /// 上传工程文件 3 /// </summary> 4 /// <returns></returns> 5 public async Task<HttpResponseMessage> UploadProjectFile() 6 { 7 ProjectFile postData = new ProjectF