欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-12-16 16:26:10
前言 最近因为工作的需要,要实现一个功能,就是需要通过发送短信进行注册,现在想把短信验证码放到服务器的session值中,当客户端收到短信并提交短信码时由asp.net服...

前言

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

 }

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

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

总结

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

上一篇:

下一篇: