您好,登录后才能下订单哦!
前言
最近因为工作的需要,要实现一个功能,就是需要通过发送短信进行注册,现在想把短信验证码放到服务器的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;
 }


总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对亿速云的支持。
 
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。