近期需要实现一个功能,就是需要通过发送短信进行注册,现在想把短信验证码放到服务器的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;

}

public class HttpUtils {//创建一个http链接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 */              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+"SESSIONID="+JSESSIONID;    }    return null;    }    //检测网络是否有连接    public static boolean isConnect(Context c)    {     try     {     // 获取手机所有连接管理对象(包括对wi-fi,net等连接的管理)      ConnectivityManager connectivity =         (ConnectivityManager)c.getSystemService(Context.CONNECTIVITY_SERVICE);      if(connectivity != null)      {      // 获取网络连接管理的对象       NetworkInfo info = connectivity.getActiveNetworkInfo();      if(info != null)      {      return true;      // 判断当前网络是否已经连接       // if (info.getState() == NetworkInfo.State.CONNECTED) {       //  return true;       // }       }      }      return false;     }     catch(Exception e)     {     return false;     }    }    public static String getCurrentIp() {    try {    for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {    NetworkInterface intf = en.nextElement();    for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {    InetAddress inetAddress = enumIpAddr.nextElement();    if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {    //if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet6Address) {    return inetAddress.getHostAddress().toString();    }    }    }    } catch (Exception e) {    }    return "";    }    public static void CancelHttpClient()    {     if(httpClient != null)    {    httpClient.getConnectionManager().shutdown();    }    }}

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

  1. 自己实现FormsAuthentication.SetAuthCookie方法,怎样在ASP.NET服务端代码中删除客户端Cookie

    如何手动设置AuthCookie ASP.NET中实现可以自己实现FormsAuthentication.SetAuthCookie方法,控制更为灵活 /// <summary> /// ...

  2. Asp.Net_ 服务端向客户端写JavaScript脚本

    在Asp.net 服务端处理脚本,一般都用 ClientScriptManager ,即web窗体服务端的this.ClientScript.该对象比较常用的方法: 1.RegisterArrayDe ...

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

    摘要 虽然ASP.NET的服务器控件一直被大家所诟病,但是用户控件(ACSX)在某些场景下还是非常有用的. 在一些极特珠的情况下,我们会使用JavaScript动态的构建页面中的控件,但假设遇到了我要 ...

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

    服务端: package com.sxt.day05; import java.io.IOException; import java.util.ArrayList; import javax.ser ...

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

    Android ListView分页载入功能 在实际开发中经经常使用到,是每一个开发人员必须掌握的内容,本Demo给出了服务端+Android端的两者的代码,并成功通过了測试. 服务端使用MyEcli ...

  6. Android上传图片到服务器,服务端利用.NET WCFRest服务读取文件的解决方案

    在项目中遇到要将Android设备拍摄的照片上传的服务器,将文件保存在服务器本地的文件夹中,数据库中保存的是图片文件名.整个上传是将图片生成二进制流通过HTTP请求上传到服务端,服务端是基于.NET环 ...

  7. android 图片上传到服务端 文件损坏问题

    在网上找的例子,怎么试都不行. 上传上去之后提示文件损坏,不过最后问题还是找到了. 是因为不能在写入流的byte中写入其他内容 这是网上的例子 如果是要在服务端取文件名,可以在这里写入 在服务端获取文 ...

  8. java访问webservce,保持会话,服务端保存session验证

    在进行程序开发的过程中,遇到一个问题,怎么保持会话. 因为一帮进行方法调用很少涉及到即时身份验证的. 例如: 1:客户端登录后服务端保存登录用户信息: 2:客户端持有验证通过key再次请求: 3:服务 ...

  9. 服务端关闭session的重要性

    原因如下: 如果你的站点是一个每日请求上百万级规模的接口服务, 每一次请求(这里应该是没有携带cookie的请求)都会在服务端产生一个session会话,也就是一个小文件. 一般而言,php的sess ...

随机推荐

  1. (转)Centos搭建FTP服务器

    场景:ftp服务器对于在Linux服务器上进行文件操作太方便,在安装软件时候,大的软件也可以先上传再进行安装! 1 搭建FTP服务器 1.1 检查vsftpd 查看是否已经安装vsftpd rpm - ...

  2. jQuery请求后台接口

    function test() { console.log("请求准备发送"); $.ajax({ type : "POST", url : "/ap ...

  3. NodeJS之queryString

    前面的话 无论是前端还是后端,经常出现的应用场景是URL中参数的处理.nodeJS的queryString模块提供了一些处理 query strings 的工具.本文将详细介绍nodeJS中的quer ...

  4. 数据处理之pandas简单介绍

    Offical Website :http://pandas.pydata.org/ 一:两种基本的数据类型结构 Series 和 DataFrame 先来看一下Series import panda ...

  5. SSRF漏洞学习

    SSRF SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞.一般情况下,SSRF攻击的目标是从外网无法访问的内 ...

  6. Github 开源:使用升讯威 Mapper( Sheng.Mapper)与 AutoMapper 互补,大幅提高开发效率!

    Github 地址:https://github.com/iccb1013/Sheng.Mapper 在上一篇幅中,简单介绍了 升讯威 Mapper( Sheng.Mapper)[http://www ...

  7. CSS3基础(2)—— 文字与字体相关样式、盒子类型、背景与边框相关样式、变形处理、动画功能

    一. CSS3 文字与字体相关样式 1. 给文字添加阴影 text-shadow: length length length ccolor; 属性适用于文本阴影,指定了水平阴影,垂直阴影,模糊的距离, ...

  8. trycatch放在for循环的里面还是外面好

    try放在for循环里面和外面的区别是什么呢?先看看下面的代码的区别:public class Test {    public void test1(){        for (int count ...

  9. Mac OSX中的@executable_path, @load_path和@rpath的理解(网摘)

    Mac OSX中的@executable_path, @load_path和@rpath的理解 原文出处:[24K纯开源] Note: this article is actually about t ...

  10. 【转载】初识google test

    一.前言 本篇将介绍一些gtest的基本使用,包括下载,安装,编译,建立我们第一个测试Demo工程,以及编写一个最简单的测试案例. 二.下载 如果不记得网址, 直接在google里搜gtest,第一个 ...